java - 不一致的类层次结构

标签 java class inheritance

我读过类构造函数 here然后出现一个问题,为什么以下层次结构不正确:

public class Test extends Subclass.Inner{ //compile-time error 
                           //The hierarchy of the type Test is inconsistent
    public Test() {
        super();
    }
}


public class Subclass extends Test{
    public class Inner{
    }
}

正式

If a superclass constructor invocation statement is unqualified, and if S is an inner member class, then it is a compile-time error if S is not a member of a lexically enclosing class of C by declaration or inheritance.

我认为这个例子完全满足我引用的规则。在这种情况下,SubClass 通过继承从词法上包含了 Test 的类。为什么代码不能正常工作?您能否提供一个适当的例子来反射(reflect)这一点?

最佳答案

内部类的实例必须有一个封闭实例,它在内部类实例之前被初始化。另一方面,父类(super class)构造函数总是在子类构造函数之前执行。因此,创建SubClass的实例需要先调用Test的构造函数,这需要先调用SubClass.Inner的构造函数,但是SubClass.Inner 不能在其包含实例之前初始化。

我认为,为了满足您引用的条件,父类(super class) Inner 必须包含在父类(super class) Test 中。在您的情况下,它包含在 Test 的子类中。

关于java - 不一致的类层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26954843/

相关文章:

C++:继承和重载决议

java - 从字符串更改为对象名称 Java

Java - 如何编写非常大(20,000x20,000 像素或更大)的 tif 图像

java - 身份验证方法

Java 常量类链接(点表示法)

php - 如何使用 PHPUnit 测试特定方法

ios - 德尔福 + iOS : How to declare simple ObjC-Class?

Python:从子类调用父类(super class)方法时超出最大递归深度

c# - 获取子类的实例

java - JDBC SQL Server 无法建立 SSL 连接