10

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

我也在 google 和stackoverflow.com上尝试了许多链接,但它们似乎都在处理内部类访问最终成员而不是最终内部类本身。我在谷歌上找到了这个链接,但即使它没有解释它。

提前谢谢!

4

3 回答 3

7

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

于 2012-06-14T05:51:39.377 回答
0

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

考虑这个例子:

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

如果将 final 修饰符添加到 A 它将产生编译错误。

于 2012-06-14T05:49:54.843 回答
0

好吧,在这种情况下,内部类与外部类没有任何不同。所以下面的代码是完全有效的。

class Outer {
 int some_member;

 class Inner {
 void method();
 }
}

class OuterExtendsInner extends Outer.Inner{

}

众所周知,声明一个类 final 的目的是防止任何外部入侵者继承该类并利用其设施,就像我们在内部类的情况下可以做的那样。

于 2012-06-14T07:24:01.750 回答