Tôi gặp khó khăn khi hiểu cách thức hoạt động của kế thừa trong Java khi các lớp bên trong hiện diện. Tôi hiện đang làm việc trên một cái gì đó mà một lớp con cần phải thay đổi chút ít chức năng của lớp bên trong của cha mẹ của nó. Tôi đã đưa ra một ví dụ đơn giản hơn, mang tính hậu môn bên dưới.Làm thế nào để kế thừa Java hoạt động khi các lớp bên trong có liên quan
Tôi mong đợi mã này để in "Tôi là ChildClass.InnerClass" nhưng thay vào đó nó in "Tôi là ParentClass.InnerClass". Tại sao điều này? Ngoài ra, nếu tôi thay đổi đối tượng obj trong chính thành loại ChildClass thì đầu ra sẽ thay đổi thành "Tôi là ChildClass.InnerClass". Tại sao điều này?
Nói chung, cách được khuyến nghị thay đổi hành vi của đối tượng bên trong của lớp cha đối tượng là gì?
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 có nghĩa là x trong child' ?? bạn có nghĩa là ChildClass obj; – exexzian
@sansix: Chính xác. Cảm ơn bạn đã chỉnh sửa. –
+1 cho giải pháp – exexzian