Java 什么是最终的内部类?
将非静态内部类声明为Java 什么是最终的内部类?,java,inner-classes,Java,Inner Classes,将非静态内部类声明为final意味着什么 我在google和google上尝试了很多链接,但它们似乎都是关于访问最终成员的内部类,而不是最终内部类本身。 我在谷歌上找到了链接,但连它都解释不了 先走一步 它与被声明为final的外部类具有相同的语义:该类不能扩展 考虑这个例子: public class MyClass { public class A { } public class B extends A { } } 如果将final修饰符添加到,将生成编译错误。生成顶级类
final
意味着什么
我在google和google上尝试了很多链接,但它们似乎都是关于访问最终成员的内部类,而不是最终内部类本身。
我在谷歌上找到了链接,但连它都解释不了
先走一步 它与被声明为final的外部类具有相同的语义:该类不能扩展 考虑这个例子:
public class MyClass {
public class A {
}
public class B extends A {
}
}
如果将final修饰符添加到,将生成编译错误。生成顶级类
final
和生成内部类final
之间没有语义上的区别:它告诉编译器不能从类继承。标记类final
有时是为了让编译器跳过虚拟表查找,但这通常被认为是过早的微优化。好吧,在这种情况下,内部类与外部类没有任何不同。所以下面的代码是完全有效的
class Outer {
int some_member;
class Inner {
void method();
}
}
class OuterExtendsInner extends Outer.Inner{
}
众所周知,声明类final的目的是防止任何外部入侵者对该类进行子类化并利用其功能,对于内部类,我们也可以这样做。为什么你认为这意味着与顶级类期末考试不同?因为内部类是一个类,但它也是外部类的一个成员。那么它是不可继承的还是因为final会有其他行为呢?final就是final。这只意味着一件事:类不能扩展。非技术性说明:你应该使用@where来回复评论,否则收件人将不会收到你的评论。thnx!另外,如何从外部类扩展非最终内部类<代码>TestClass扩展了MyOuter。MyInner?TestClass需要一个接受MyOuter的构造函数。然后调用MyOuter的super方法。@SurenderThakran我认为只有当您试图扩展的内部类是静态的时,才可能这样做。看到这个了吗