什么是最终内部类?

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 的目的是防止任何外部入侵者继承该类并利用其设施,就像我们在内部类中可以做的那样。

【讨论】:

以上是关于什么是最终内部类?的主要内容,如果未能解决你的问题,请参考以下文章

当方法中有最终值和内部类时,究竟会发生啥?

最终类object 和内部类

Java基础——内部类

匿名内部类

Java 内部类有坑。。100 % 内存泄露!

Java内部类有坑,100%内存泄露!