Remplacer Setter dans la sous-classe
Je suis coincé avec un problème ici. Je veux changer le setter à partir d'un attribut de la classe mère (parent de la classe) dans mon sous-classe (enfant), cependant quand je annuler cette méthode dans mon sous-classe, je ne peux pas accéder à mon privé des attributs de la supperclass. Et le point est, ils doivent rester privées.
Super-classe (problème: setMinimumVoorraad(int voorraad);)
paquet domein;
public abstract class Artikel implements Weegbaar
{
private String omschrijving;
private double prijs;
private int aantalInStock;
private int minimumVoorraad;
public Artikel(String omschrijving, double prijs, int aantalInStock, int minimumVoorraad)
{
this.setOmschrijving(omschrijving);
this.setPrijs(prijs);
this.setAantalInStock(aantalInStock);
this.setMinimumVoorraad(minimumVoorraad);
}
@Override
public String toString()
{
String output = String.format(" \n omschrijving: %s \n prijs: %f \n In stock %d (minimumvoorraad = %d) \n", this.omschrijving, this.prijs, this.aantalInStock, this.minimumVoorraad);
return output;
}
//----Getters----
public String getOmschrijving() {
return omschrijving;
}
public double getPrijs() {
return prijs;
}
public int getAantalInStock() {
return aantalInStock;
}
public int getMinimumVoorraad() {
return minimumVoorraad;
}
//----Setters----
public void setOmschrijving(String omschrijving) {
this.omschrijving = omschrijving;
}
public void setPrijs(double prijs) {
this.prijs = prijs;
}
public void setAantalInStock(int aantalInStock) {
this.aantalInStock = aantalInStock;
}
public void setMinimumVoorraad(int minimumVoorraad)
{
if(minimumVoorraad < 2)
this.minimumVoorraad = 3;
else
this.minimumVoorraad = minimumVoorraad;
}
}
Sous-classe
package domein;
public class Food extends Artikel
{
private String houdbaarheidsDatum;
private double nettoGewicht;
public Food(String omschrijving, double prijs, int aantalInStock, int minimumVoorraad, String houdbaarheidsDatum, double nettoGewicht)
{
super(omschrijving, prijs, aantalInStock, minimumVoorraad);
this.setHoudbaarheidsDatum(houdbaarheidsDatum);
this.setNettoGewicht(nettoGewicht);
}
@Override
public boolean isWeegbaar()
{
return true;
}
//----Getters----
public String getHoudbaarheidsDatum() {
return houdbaarheidsDatum;
}
public double getNettoGewicht() {
return nettoGewicht;
}
//----Setters----
public void setHoudbaarheidsDatum(String houdbaarheidsDatum) {
this.houdbaarheidsDatum = houdbaarheidsDatum;
}
public void setNettoGewicht(double nettoGewicht) {
this.nettoGewicht = nettoGewicht;
}
@Override
public void setMinimumVoorraad(int minimumVoorraad)
{
if(minimumVoorraad < 5)
this.minimumVoorraad = 6;
else
this.minimumVoorraad = minimumVoorraad;
}
}
Quelqu'un qui peut m'aider?
Merci à l'avance.
- De manière assez évidente, nous avons besoin de voir le code.
Vous devez vous connecter pour publier un commentaire.
La réponse donnée ci-dessus par NPE est absolument la meilleure façon de résoudre ce problème. Il est élégant et les honneurs de base de contrats d'héritage entre les super-classe et sous-classe. Même dans votre post original, le sous-classe est en fait plus restrictive que la super-classe, afin de faire quelque chose comme:
exactement comme NPE proposées permettraient de probablement de travail. (Notez que je l'ai modifié votre
if
test. Pas sûr si c'est une faute de frappe, mais à l'origine, la mise en œuvre5
serait valable minimum, mais une entrée comme4
elle à6
.)D'autres (éventuellement acceptable) les modèles seraient les suivants:
protected
, qui permettrait de donner de la visibilité. (Rendez compte que vous ne mentionnez unprivate
restriction; ce modèle est uniquement mentionné à fournir une information plus complète réponse globale.)Et maintenant, sur la (probablement inacceptable) motif de l'utilisation de Java réflexion:
Il est intéressant de noter que si vous n'avez jamais jamais faire dans votre vie entière, vous aurez probablement être le mieux pour elle. Non seulement il complètement rompre tous les contrats, mais il s'appuie sur des Chaînes codées en dur pour ne nom de champ des recherches, ce qui en soi est assez douloureux. Mais il existe. Et pas de bonne réponse (déjà donné ci-dessus par NPE) ne serait pas complet sans un exemple de la façon dont pas à faire quelque chose...
Une possibilité est de mettre en œuvre le sous-classe de définition de la en termes de la superclasse, setter (qui, sans doute, vous n'avez accès).
Par exemple, en supposant que le setter est
setFoo
, puis le sous-classe de la version pourrait être:private
et la seule définition, vous avez accès à quelque chose que vous ne voulez pas que ça à faire, il n'y a rien que vous pouvez faire à ce sujet. (Par conception; la super-classe est la protection de son comportement défini.)