当内部类存在时,我无法理解继承在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();
}
}