Non riesco a capire come funziona l'ereditarietà in Java quando sono presenti classi interne. Attualmente sto lavorando a qualcosa in cui una classe figlia ha bisogno di modificare leggermente la funzionalità della classe interna del suo genitore. Di seguito ho trovato un esempio più semplice e analogo.Come funziona l'ereditarietà di Java quando sono coinvolte classi interne
Mi aspettavo che questo codice stampasse "I am a ChildClass.InnerClass", ma invece stampa "I am a ParentClass.InnerClass". Perchè è questo? Inoltre, se cambio l'oggetto obj nel main di tipo ChildClass, l'output cambia in "I am a ChildClass.InnerClass". Perchè è questo?
In generale, qual è il modo consigliato di alterare il comportamento dell'oggetto interno della classe genitrice di un oggetto?
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 significa la x in child' ?? intendevi l'obj ChildClass; – exexzian
@sansix: esattamente. Grazie per la modifica. –
+1 per la soluzione – exexzian