当涉及内部类时,Java 继承如何工作
2022-09-04 03:34:15
当存在内部类时,我无法理解继承在Java中是如何工作的。我目前正在研究一些东西,其中子类需要稍微改变其父类的内部类的功能。我在下面提出了一个更简单,更典型的例子。
我期望此代码打印“I am a ChildClass.InnerClass”,但它打印的是“I am a ParentClass.InnerClass”。这是为什么呢?此外,如果我将 main 中的 obj 对象更改为 ChildClass 类型,则输出将更改为“I am a 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();
}
}