Как работает наследование Java, когда задействованы внутренние классы
У меня возникают проблемы с пониманием того, как наследование работает в Java, когда присутствуют внутренние классы. В настоящее время я работаю над тем, что дочернему классу нужно немного изменить функциональность внутреннего класса своего родителя. Ниже я привел более простой, анаггитивный пример.
Я ожидал, что этот код напечатает «Я - ChildClass.InnerClass», но вместо этого он напечатает «Я - ParentClass.InnerClass». Почему это? Кроме того, если я изменю объект obj в main на тип 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();
}
}