我读过类构造函数 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/