2016-11-28 6 views
0

Je veux, dans mon résumé class, définir deux constructeurs.Constructeurs multiples et si Déclaration

Lorsque créer une nouvelle instance de la class, je veux le toString pour revenir quelque chose de différent en fonction de ce qu'on appelait:

Le fourgon d'incendie Class

public class FireEngine extends EmergencyVehicle { 

    private String colour; 

    public FireEngine(String colour) { 
     super (colour); 

    } 
    public FireEngine() { 
     this("red"); 

    } 

    public String toString() { 
     if (colour == "red") { 
      return "red"; 
    } else 
     return "no"; 
    } 
} 

La classe EmergencyVehicle:

public abstract class EmergencyVehicle extends RoadVehicle { 

    public boolean codeBlue = false; 

    public EmergencyVehicle(String colour){ 
     super(colour); 
    } 

    public boolean isEmergency() { 
     if (codeBlue == true) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public void setEmergency(boolean newEmergency) { 
     codeBlue = newEmergency; 
    } 

} 

Ceci est un exercice de devoirs, donc je ne veux pas la réponse en soi, mais le code ci-dessus est-il logique? Par exemple, si j'ajoute un nouveau véhicule EmergencyVehicle, je souhaite une instruction if en fonction de la couleur du véhicule que j'ajoute.

+2

où est votre classe EmergencyVehicle? Postez ici – developer

+0

Eh bien, pas vraiment de sens, bien que votre intention était probablement clair ... http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java –

+1

vous pourriez vouloir utiliser un type de couleur prédéfini? https://docs.oracle.com/javase/7/docs/api/java/awt/Color.html – HRgiger

Répondre

4

1er Remarque

Ne pas appeler

this("red"); 

dans le constructeur par défaut, faire

colour = "red"; 

à moins que le constructeur EmergencyVehicle(String colour) RoadVehicle(String colour) fait autre chose.

2 Remarque

Ne pas comparer l'utilisation

if (colour == "red") 

utilisation

if ("red".equals(colour)) 

3ème Remarque

La méthode

public String toString() 

est supposé renvoyer une représentation sous forme de chaîne de l'instance. Vous implémentation ne renvoie que red ou no ce qui n'est pas très instructif. Utilisez quelque chose comme

return("FireEngine(colour=" + colour + ")"); 
+0

Qu'est-ce qui ne va pas avec 'this (" red ")'? Peut-être que le super appel fait correctement 'color =" red "' –

+0

@ cricket_007 Probablement pas. Remarque 'private String color;'. –

+2

Mais alors il n'y aurait pas besoin de la 'couleur de la chaîne privée;' – Grunzwanzling