La raison pour laquelle l'enfant n'imprime pas "enfant" est que dans l'héritage de Java, seules les méthodes sont héritées, pas les champs. La variable output
n'est pas remplacée par l'enfant.
Vous pouvez le faire comme ceci:
public class Parent {
private String parentOutput = "hallo";
String getOutput() {
return output;
}
public void print() {
System.out.println(getOutput());
}
}
public class Child extends Parent {
private String childOutput = "child";
String getOutput() {
return output;
}
}
En outre, les variables chaîne ne doivent pas nécessairement être des noms différents, mais je l'ai fait pour plus de clarté.
Une autre, serait beaucoup plus facile à lire pour ce faire:
public class Parent {
protected String output;
public Parent() {
output = "hallo";
}
public void print() {
System.out.println(output);
}
}
public class Child extends Parent {
public Child() {
output = "child";
}
}
Dans cet exemple, la variable est protected
, ce qui signifie qu'il peut être lu à la fois le parent et l'enfant. Le constructeur des classes définit la variable à la valeur désirée. De cette façon, vous n'implémentez la fonction d'impression qu'une seule fois et vous n'avez pas besoin d'une méthode redondante en double.
ok, ça marche, mais je ne comprends pas pourquoi ma tentative ne peut pas travailler .... –
@ Martin: Parce que vous créiez une variable complètement distincte et définissiez la valeur de * this * dans 'Child'. La classe 'Parent' n'est pas consciente de la variable dans' Child'. –