什么是最终内部类?
Posted
技术标签:
【中文标题】什么是最终内部类?【英文标题】:What are final inner classes? 【发布时间】:2012-06-14 05:39:38 【问题描述】:将非静态内部类声明为final
是什么意思?
我也在 google 和 ***.com 上尝试了许多链接,但它们似乎都在处理内部类访问最终成员而不是最终内部类本身。 我在 google 上找到了 this 链接,但即使它也没有解释。
提前谢谢!
【问题讨论】:
为什么你会认为它的含义与制作***类决赛有什么不同? 好吧,因为内部类是一个类,但它也是外部类的成员。那么它是不可继承的还是会因为 final 而出现其他一些行为? 决赛是决赛。它只意味着一件事:类不能扩展。 非技术说明:回复 cmets 时应使用@whoever,否则收件人不会收到您的评论的通知。 【参考方案1】:创建***类final
和创建内部类final
在语义上没有区别:它告诉编译器您不能从该类继承。标记类final
有时是为了让编译器跳过虚拟表查找,但这通常被认为是过早的微优化。
【讨论】:
【参考方案2】:它与被声明为 final 的外部类具有相同的语义:该类不能扩展。
考虑这个例子:
public class MyClass
public class A
public class B extends A
如果将 final 修饰符添加到 A 会产生编译错误。
【讨论】:
谢谢!另外我将如何从外部类外部扩展非最终内部类?TestClass extends MyOuter.MyInner
??
TestClass 需要一个带有 MyOuter 的构造函数。然后调用 MyOuter 的超级方法。
@SurenderThakran 我认为这只有在您尝试扩展的内部类是静态的情况下才有可能。看到这个inheritance matrix【参考方案3】:
好吧,在这种情况下,内部类与外部类没有任何不同。所以下面的代码是完全有效的。
class Outer
int some_member;
class Inner
void method();
class OuterExtendsInner extends Outer.Inner
众所周知,声明类 final 的目的是防止任何外部入侵者继承该类并利用其设施,就像我们在内部类中可以做的那样。
【讨论】:
以上是关于什么是最终内部类?的主要内容,如果未能解决你的问题,请参考以下文章