Java étend l'exemple
j'ai une question de débutant java:
Parent.imprimer() affiche "bonjour" dans la console,
mais aussi de l'Enfant.imprimer() affiche "bonjour".
J'ai pensé qu'il doit imprimer "enfant".
Comment puis-je résoudre ce problème?
public class Parent {
private String output = "hallo";
public void print() {
System.out.println(output);
}
}
public class Child extends Parent {
private String output = "child";
}
OriginalL'auteur Martin Kapfhammer | 2010-11-15
Vous devez vous connecter pour publier un commentaire.
Actuellement, vous avez deux variables distinctes, et le code dans
Parent
ne sait que surParent.output
. Vous devez définir la valeur deParent.output
"enfant". Par exemple:Une approche alternative serait de donner à la classe Parent d'un constructeur qui a pris la sortie désirée:
Cela dépend vraiment de ce que vous voulez faire.
Parce que vous avez été la création d'un tout autre variable, et le réglage de la valeur de que dans
Child
. LeParent
classe est au courant de la variable dansChild
.OriginalL'auteur Jon Skeet
Child
n'ont pas accès àParent
'soutput
variable d'instance parce qu'il estprivate
. Ce que vous devez faire c'est deprotected
et dans le constructeur deChild
ensembleoutput
à"child"
.En d'autres termes, les deux
output
variables sont différentes.Vous pourriez aussi le faire si vous modifiez la sortie de la
protected
dansParent
:OriginalL'auteur Jeremy
La raison pour laquelle l'enfant n'est pas l'impression "enfant", c'est que dans l'héritage en java, seules les méthodes sont héritées, pas de champs. La variable
output
n'est pas remplacée par l'enfant.Vous pourriez le faire comme ceci:
Aussi, les variables de Chaîne de caractères ne doivent pas être des noms différents, mais je l'ai fait ici pour plus de clarté.
Un autre, plus lisible serait pour ce faire:
Dans cet exemple, la variable est
protected
, le sens qu'il peut être lu à partir à la fois le parent et l'enfant. Le constructeur des classes définit la variable à la valeur souhaitée. De cette façon, vous ne mettez en œuvre la fonction d'impression une fois, et n'ont pas besoin d'un double de la méthode redéfinie.OriginalL'auteur Mike Miller
Quand j'ai été à essayer de comprendre l'étendue de mots clés, j'ai été en utilisant deux classes. J'espère que vous aident aussi à comprendre l'idée de base.
Parent.java
Child.java
OriginalL'auteur KostasA