当存在内部类时,我无法理解继承在 Java 中是如何工作的。我目前正在研究子类需要稍微改变其父类的内部类的功能。我在下面提出了一个更简单的类比示例。
我希望这段代码打印“我是 ChildClass.InnerClass”,但它打印的是“我是 ParentClass.InnerClass”。为什么是这样?此外,如果我将 main 中的 obj 对象更改为 ChildClass 类型,则输出将更改为“我是 ChildClass.InnerClass”。为什么是这样?
一般来说,改变对象的父类内部对象的行为的推荐方法是什么?
class InnerClassTest {
//-----------------------------------------------------------------------
// PARENT CLASS
class ParentClass {
public ParentClass() {
x = new InnerClass();
}
InnerClass x;
class InnerClass {
public void speak() {
System.out.println("I am a ParentClass.InnerClass");
}
}
}
//-----------------------------------------------------------------------
// CHILD CLASS
class ChildClass extends ParentClass {
public ChildClass() {
x = new InnerClass();
}
InnerClass x;
class InnerClass extends ParentClass.InnerClass {
public void speak() {
System.out.println("I am a ChildClass.InnerClass");
}
}
}
//-----------------------------------------------------------------------
// MAIN
public static void main(String[] args) {
ParentClass obj = (new InnerClassTest()).new ChildClass();
obj.x.speak();
}
}