我無法理解繼承在Java中是如何工作的,當內部類是存在的。我目前正在研究一些子類需要稍微改變父類內部類的功能的東西。我在下面提出了一個更簡單,更具代表性的例子。如何Java繼承工作時內部類涉及
我希望這段代碼打印「我是ChildClass.InnerClass」,但它打印 「我是ParentClass.InnerClass」。爲什麼是這樣?另外,如果我改變主 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();
}
}
'ParentClass obj; //obj.x表示孩子中的x你的意思是ChildClass obj; – exexzian
@sansix:的確如此。感謝編輯。 –
+1的解決方案 – exexzian