【发布时间】:2012-10-13 23:42:03
【问题描述】:
当存在内部类时,我无法理解 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();
}
}
【问题讨论】:
-
如果第二个
InnerClass扩展ParentClass.InnerClass那么它的构造函数将调用ParentClass构造函数。因此用ParentClass 的Innerclass 隐藏ChildClass 的Innerclass
标签: java inheritance polymorphism inner-classes