Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是最终的内部类?_Java_Inner Classes - Fatal编程技术网

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我认为只有当您试图扩展的内部类是静态的时,才可能这样做。看到这个了吗