将非静态内部类声明为 是什么意思final
?
我也在 google 和stackoverflow.com上尝试了许多链接,但它们似乎都在处理内部类访问最终成员而不是最终内部类本身。我在谷歌上找到了这个链接,但即使它没有解释它。
提前谢谢!
将非静态内部类声明为 是什么意思final
?
我也在 google 和stackoverflow.com上尝试了许多链接,但它们似乎都在处理内部类访问最终成员而不是最终内部类本身。我在谷歌上找到了这个链接,但即使它没有解释它。
提前谢谢!
创建顶级类final
和创建内部类之间没有语义区别final
:它告诉编译器您不能从该类继承。标记类final
有时是为了让编译器跳过虚拟表查找,但这通常被认为是过早的微优化。
它与被声明为 final 的外部类具有相同的语义:该类不能扩展。
考虑这个例子:
public class MyClass {
public class A {
}
public class B extends A {
}
}
如果将 final 修饰符添加到 A 它将产生编译错误。
好吧,在这种情况下,内部类与外部类没有任何不同。所以下面的代码是完全有效的。
class Outer {
int some_member;
class Inner {
void method();
}
}
class OuterExtendsInner extends Outer.Inner{
}
众所周知,声明一个类 final 的目的是防止任何外部入侵者继承该类并利用其设施,就像我们在内部类的情况下可以做的那样。