考虑类 OuterClass
,其中包含 InnerClass
public class OuterClass {
class InnerClass {
}
}
第二种情况是试图扩展 OuterClass
的 InnerClass
public class Clazz extends OuterClass.InnerClass {
public Clazz(OuterClass outerClass) {
outerClass.super();
}
}
到目前为止,这段代码将会运行,并且编译器不应该出现警告。
但是我正在尝试理解——为什么需要传递OuterClass的引用给构造函数?为什么需要调用它的超类构造函数?
我想要理解为什么必须是这个确切的方式?
此外,请考虑以下类(与之前的类无关),其中类
Apartments
和Hall
是Building
类的内部类,而Building
类又是Solution
的内部类(内部嵌套)。public class Solution {
public class Building {
public class Hall {
private BigDecimal square;
public Hall(BigDecimal square) {
this.square = square;
}
}
public class Apartments {
}
}
}
然后有一个顶层类,试图扩展内部内部类Hall。
class BigHall extends Solution.Building.Hall {
public BigHall(Solution.Building building, BigDecimal square)
{
building.super(square);
}
}
看看这个混乱的代码。最后两个类也应该编译,但是你能为我澄清一下吗?为什么在扩展内部内部类Hall
时,BigHall
类需要将对Building对象的引用传递给构造函数,而不是Solution对象?
如果您可以提供JLS的引用,那就太好了!
InnerClass
不是static
,所以它隐式地引用了其父类OuterClass
的实例。然而,我完全不知道为什么会这样做 - 如果你嵌套了3层类,那么肯定出了非常大的问题。 - Boris the Spider