2016-04-02 7 views
0

Ich versuche, eine Klasse Vehicle und einen Konstruktor für diese Klasse zu machen. Die Klasse ist gekennzeichnet durch Motorvolumen, Baujahr und Typ des Fahrzeugs (es kann nur "Auto" oder "Motorrad" sein). Was mich am letzten Bit nervt, ist, wie ich es implementieren sollte. Der Benutzer gibt c (Auto) oder m (Motorrad) ein. Meine Frage ist, was ist der beste Weg, dies zu implementieren?Konstruktor if-Anweisung

Sollte ich eine if Anweisung innerhalb des Konstruktors machen (z. B. wenn der übergebene Parameter des Fahrzeugtyps 'c' ist, dann mache einen String 'Auto' oder 'Motorrad' für m).

oder

Sie eine ähnliche Sache in der public static void main Methode, wo ich String Car oder String Motorcycle (je nach Eingabe) machen würde und es nur an den Konstruktor übergeben.

+4

Eine Enum? Das klingt nach einer sehr typischen Anwendung von Enums. –

+0

Nicht so fortgeschritten in Java, Anfängerkurs, ziemlich sicher, dass ich eine Anfängerlösung brauche. – monolith937

+0

Nun, ich dachte, Enums könnten einfach sein. Ich sehe natürlich, wenn du keine Enums gelernt hast, solltest du sie nicht benutzen. In diesem Fall würde ich das Zeichen ("c" oder "m") einfach im Objekt "Fahrzeug" speichern. Wenn Sie etwas fortgeschritten sein möchten, können Sie eine if-Anweisung in eine Getter- und/oder toString-Methode einfügen, so dass Sie immer noch "Auto" oder "Motorrad" ausdrucken können. –

Antwort

2

Idealerweise sollten Sie nicht Logik im Konstruktor als Konstruktor gesetzt wird zur Initialisierung Zweck verwendet . Auf diese Weise sollten Sie die if-Bedingung in die main-Methode einfügen und dann die endgültigen Werte an den Konstruktor übergeben.

+1

Okay, also im Grunde sollte ich bereits einen vordefinierten Wert an einen Konstruktor übergeben, niemals innerhalb eines. Z.B. 'Vehicle v = new Vehicle (2200, 1976," car ");' – monolith937

+2

Die Grundidee ist hier, dass die kleinste Logik innerhalb des Konstruktors wie gegen Konventionen gelegt wird. Ja, Sie sollten dem Konstruktor einen vordefinierten Wert übergeben. – ValarDohaeris

+1

Ist das nur ich? Eine Konvention, Logik im Konstruktor zu vermeiden, ist neu für mich. Ich habe manchmal meine Konstruktor Aufrufmethoden, die Logik enthalten. Was wäre das Problem in diesem Fall? –

0

Die allgemeine Praxis ist, abstraktes Fahrzeug zu schaffen und es dann mit Klassen Auto und Motorrad zu erweitern.

abstract class Vehicle 
{ 
    //Common logic here 
} 
class Car extends Vehicle 
{ 
    //Car-specific stuff here 
} 

class Motorcycle extends Vehicle 
{ 
} 

Sie sollen jetzt die entsprechende Instanz im Hauptverfahren erstellen, später können Sie factory pattern zum Erstellen klassenspezifische Verhalten

+1

Der ganze Trick besteht nicht darin, Unterklassen zu bilden. Ich war nur neugierig, was der beste Weg ist, das 'String'-Problem zu lösen. Das Auto und das Motorrad werden immer noch das gleiche Objekt sein, der einzige Unterschied ist, dass man eine "Schnur" hat, die Auto, die andere "Motorrad" sagt. – monolith937

+0

Wenn ja, würde ich ENUMS wirklich empfehlen - wenn Sie keine Logik im Inneren und nur eine Flagge für Fahrzeugtyp benötigen, ist das Enum die richtige Lösung. – Akceptor

+0

Oh, nun muss ich noch zu enums kommen. Ich bin ein Neuling, der gerade erst angefangen hat, aber ich glaube, dass die Enum-Lösung später nützlich sein wird. Danke :) – monolith937

Verwandte Themen