0
votes

Comment différencier différentes sous-classes dans un tableau de la superclasse?

Ma configuration est la suivante. J'ai une superclasse appelée "bouteilles" et 2 sous-classes différentes, "eau" et "soda". Il y a un tableau rempli d'innombrables de ces deux et mon objectif est d'écrire une méthode qui renvoie les valeurs de litre total d'une seule de ces sous-classes. Quel serait le meilleur moyen d'accomplir cela? Autant que je sache, l'instanceof 'n'a aucune utilité ici.

Pour clarifier, je veux seulement savoir quel opérateur / méthode utilisée pour comparer: P>

if (bottles[0]==soda){
      ...
}


4 commentaires

Quelle langue utilisez-vous? Comment ces classes sont-elles appliquées? Trop peu de détails.


pourquoi vous pensez que "l'instanceOf n'a aucune utilité" Vous pouvez l'utiliser comme bouteilles [0] instance de l'eau


L'instance de soda de l'eau n'a pas compilé, donc je suppose que cela ne fait aucune différence si le tableau est de type bouteille.


Veuillez partager vos tentatives et vos messages d'erreur possibles


3 Réponses :


2
votes

IIRC, l'instanceOf fonctionne toujours.

Cependant, vous pouvez mettre la logique de vos critères de comptage-litre dans votre méthode de sous-classe? Pour que, si vous voulez compter le litre de boisson sucrée dans vos bouteilles, votre eau devait retourner 0 mais votre soda devrait retourner réel litre. Étant donné que les sous-classes connaissent le meilleur de lui-même, il est préférable que vous les laissez vous donner la réponse directement. Ne pas casser l'encapsulation.


0 commentaires

0
votes
if(bottles[i] instanceof Soda) {
    return bottles[i].getRealLiter();
    }
 else if(bottles[i] instanceof Water) {
    return 0;
}

0 commentaires

0
votes

En règle générale Si vous avez le contrôle des classes de bouteilles et que vous devez toujours utiliser instance de code> dans votre code, vous avez des problèmes avec votre conception.

class SodaBottle implements Bottle {
private int liters;

public void addLiters(LiterCalculator calculator) { calculator.addSoda(liters); }
}


0 commentaires