Mam problem ze zrozumieniem, jak dziedziczenie działa w Javie, gdy są obecne klasy wewnętrzne. Obecnie pracuję nad czymś, w którym klasa potomna musi nieznacznie zmienić funkcjonalność wewnętrznej klasy jej rodzica. Poniżej przedstawiam prostszy, przykładowy przykład.W jaki sposób dziedziczenie Java działa przy wewnętrznych klasach?
Spodziewałem się, że ten kod wydrukuje "I am a ChildClass.InnerClass", ale zamiast tego wypisze "I am ParentClass.InnerClass". Dlaczego to? Ponadto, jeśli zmienię obiekt obj w głównym na typ ChildClass, wówczas wynik zmieni się na "I am a ChildClass.InnerClass". Dlaczego to?
Jaki jest zalecany sposób zmiany zachowania obiektu wewnętrznego klasy obiektu?
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 oznacza x w dziecku' ?? czy miałeś na myśli ChildClass obj; – exexzian
@sansix: Dokładnie. Dziękuję za edycję. –
+1 za rozwiązanie – exexzian