在java中扩展外部类是如何工作的
参考本文中的代码,我想知道外部类的扩展是如何工作的。我的意思是一个类(内部类)如何在两个地方有它的定义(由于是内部类而在外部类中,由于扩展了外部类而在自身中)。这样做时,什么会进入内部 多谢各位 代码在java中扩展外部类是如何工作的,java,inner-classes,extends,outer-classes,Java,Inner Classes,Extends,Outer Classes,参考本文中的代码,我想知道外部类的扩展是如何工作的。我的意思是一个类(内部类)如何在两个地方有它的定义(由于是内部类而在外部类中,由于扩展了外部类而在自身中)。这样做时,什么会进入内部 多谢各位 代码 public class Something { private int y; class IsSomething extends Something { public void print() { System.
public class Something {
private int y;
class IsSomething extends Something {
public void print() {
System.out.println("123");
}
}
}
内部类具有对其外部类的实例的引用。这是一种“有-有”的关系 如果它扩展了它的外部类,那么它也与它的外部类有一个is-a关系 因此,它相当于以下两个顶级类:
public class Foo {
...
}
public class Bar extends Foo {
private Foo outerFoo;
...
}
你的问题没有道理。内部类定义在一个位置:内部类中。@EJP:但是如果内部类扩展外部类,则扩展类可以使用外部类的所有成员(私有成员除外)(包括内部类本身)。所以看起来内部类可以通过外部类访问自身。仍然不清楚。给我们看一个代码示例。@TheBlastOne:我已经在问题中添加了代码。内部类声明可以看作是一个
静态final
字段,因此内部类不能像访问任何其他类一样“访问自己”。当您创建内部类的实例时,它包含它自己的所有字段和对外部类实例的引用。但是,外部类实例不包含对您刚刚创建的内部实例的引用。因此,outerFoo实例不会对Bar类的对象进行任何引用?不会,除非它显式调用其构造函数并将创建的Bar对象分配给字段。如果您理解这一点,就虚拟机而言,所有类都是顶级类,嵌套类不需要特殊支持。嵌套全部由编译器转换处理。然后,在理解嵌套类和内部类时,事情就会清楚了。