最后的内部课程是什么?

时间:2012-06-14 05:39:39

标签: java inner-classes

将非静态内部类声明为final是什么意思?

我在google和stackoverflow.com上尝试了很多链接,但是所有这些链接似乎都在处理内部类访问最终成员而不是最终内部类本身。 我在谷歌上发现了this链接,但即使它没有解释它。

提前Thanx!

3 个答案:

答案 0 :(得分:5)

创建顶级类final和创建内部类final之间没有语义差异:它告诉编译器您不能从类继承。有时候标记类final是为了让编译器跳过虚拟表查找,但这通常被认为是过早的微优化。

答案 1 :(得分:0)

它具有与被声明为final的外部类相同的语义:该类无法扩展。

考虑这个例子:

public class MyClass {
  public class A {
  }
  public class B extends A {
  }
}

如果将最终修饰符添加到A,则会生成编译错误。

答案 2 :(得分:0)

嗯,内部类与该上下文中的外部类没有任何不同。所以下面的代码完全有效。

class Outer {
 int some_member;

 class Inner {
 void method();
 }
}

class OuterExtendsInner extends Outer.Inner{

}

众所周知,声明一个类final的目的是我们阻止任何外部入侵者继承子类并利用它的设施,就像内部类的情况一样。