L'appel de super-classe à partir d'un constructeur de sous-classe en Java
Je suis en train de créer un constructeur qui prend un champ comme un paramètre, puis la met dans un champ qui est stocké dans une super-classe. Voici le code, je suis en utilisant
public crisps(String flavour, int quantity) {
this.flavour = super.getFlavour();
this.quantity = quantity;
}
Dans la superclasse j'ai initialisé le terrain avec
private String flavour;
et j'ai une méthode d'accesseur
public String getFlavour() {
return flavour;
}
J'obtiens une erreur "saveur a un accès privé à la super-classe", mais je crois que ce n'est pas grave, comme je suis en appelant la méthode d'accesseur qui renvoie sur le champ?
Euh, ce que vous avez devrait fonctionner correctement. Êtes-vous sûr de nous montrer le vrai code?
Merci de poster un SSCCE à reproduire votre problème.
Est
oh le titre est une erreur à partir d'une autre classe, il aurait dit la saveur
Merci de poster un SSCCE à reproduire votre problème.
Est
title
déclaré dans crisps
ou dans la classe parent?oh le titre est une erreur à partir d'une autre classe, il aurait dit la saveur
OriginalL'auteur user215732 | 2013-10-11
Vous devez vous connecter pour publier un commentaire.
Ce que vous devez faire:
Ajouter un constructeur à votre super classe:
Dans les Chips de classe:
Commentaires
Quelques commentaires à votre question:
"Dans la super-classe j'ai initialisé le terrain avec "
Ce n'est pas une phase d'initialisation, c'est une déclaration. Une phase d'initialisation est lorsque vous définissez une valeur.
"J'obtiens une erreur" goût a un accès privé à la super-classe", mais je crois que ce n'est pas grave, comme je suis en appelant la méthode d'accesseur qui renvoie sur le champ?"
Lorsque vous appelez un accesseur (aka getter), c'est ok - dépend de la lecture de la visibilité.
Le problème dans votre code est le:
parce que la saveur n'est pas un champ a déclaré sur les Chips de classe, mais sur le repas de la classe, de sorte que vous ne pouvez pas faire un accès direct comme ça. vous devez utiliser ma suggestion ou de déclarer un setter sur le super classe:
Alors vous pouvez l'utiliser sur les enfants de la classe:
Je comprends et conviens; je dois dire, l'exemple était pour le bien de la discussion. J'aime votre suggestion de l'appeler à l'aide de super, d'Autres options (et la philosophie) est de faire de votre setters final (pas possible de remplacer).
OriginalL'auteur lpinto.eu
flavour
est privé. Bien que vous êtes en train de lire à partir de la méthode publique, vous êtes en l'assignant à un champ privé, et vous n'ont probablement pas les déclarer dans cette classe.Vous pouvez définir la saveur
protected
dans la classe parent ou de définir un setter pour elleFin de compte, votre code n'est pas vraiment bien. Même si elle n'a compiler, il serait plus ou moins:
flavour = flavour
. Vous devriez peut-être réfléchir à ce que vous essayez de faire un peuJe pense que vous pouvez avoir besoin d'un resserrement de la saisir sur Java et la Programmation Orientée Objet.
http://docs.oracle.com/javase/tutorial/java/concepts/
Vous devez commencer ici.
c'est juste que. Il obtient
flavour
. Vous ne pouvez pas l'utiliser pour affecter une valeur à la saveur. Si il retourné un objet mutable ensuite, vous pouvez modifier la réelle saveur, mais dans ce cas, les chaînes sont immuables.Votre
crisps
constructeur à un paramètreflavour
mais vous ne faites rien avec elle, que votre code est actuellement écrit.Créer un
public
setter.Ça drôle d'apparence après il ajoute un setter.
super.setFlavour(super.getFlavour());
Accordé, il a l'air assez drôle maintenant.OriginalL'auteur Cruncher
Cela devrait fonctionner comme voir les Docs
OriginalL'auteur HansB
faire
public,sinon votre sous-classes n'ont pas accès à cette Chaîne.
Votre super-classe n'est pas informé de l'existence de toute la sous-classe. Selon la documentation de Java, "privé" rend toute variable et la méthode de la disposition à l'intérieur de cette classe,où les variable ou méthode a été déclarée, pas de toute la classe a accès,même les sous-classes.
Une fois que vous avez la chance que votre modificateur d'accès, vous n'aurez pas toutes les erreurs.
OriginalL'auteur Aida Isay