Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.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_Extends_Outer Classes - Fatal编程技术网

在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对象分配给字段。如果您理解这一点,就虚拟机而言,所有类都是顶级类,嵌套类不需要特殊支持。嵌套全部由编译器转换处理。然后,在理解嵌套类和内部类时,事情就会清楚了。