Also als Teil eines Mietwagen-Systems muss ich Klassen schreiben, um große und kleine Autos zu repräsentieren, der Unterschied zwischen diesen ist, dass sie Tanks unterschiedlicher Größe haben und Kraftstoff mit unterschiedlichen Raten verbrauchen. Mein Ansatz ist derzeit, eine Schnittstelle, Car, zu implementieren, die von einer abstrakten Klasse AbstractCar implementiert wird, die um zwei konkrete Klassen SmallCar und LargeCar erweitert wird. Dies ist jedoch das erste Mal, dass ich Interfaces und abstrakte Klassen benutze (wir decken sie nur im Unterricht ab und diese Aufgabe soll unser Wissen über sie bestimmen) und ich habe Probleme zu wissen, was ich in welcher Klasse platzieren soll.Lernschnittstellen und Hierarchien, wo bestimmte Variablen und Methoden platziert werden können?
Die Fill-Methoden-Implementierungen sind genau die gleichen, sie müssen nur auf den richtigen Wert von FUEL_CAPACITY verweisen, so dass ich denke, dass ich diese Methoden in der AbstractCar-Klasse implementieren sollte, aber dann weiß ich nicht wie zu bekommen Sie beziehen sich auf die korrekten FUEL_CAPACITY-Werte. Das Feld fuelLevel wird offensichtlich auch von allen Autos gehalten, so dass ich glaube, dass ich es in AbstractCar deklarieren sollte, aber dann kann ich von den Unterklassen nicht darauf zugreifen, ohne seine Privatsphäre zu entfernen.
Würde mir jemand helfen, herauszufinden, was ich falsch mache oder was ich über Schnittstellen und Vererbung falsch verstehe? Eine Sache, die ich in Betracht gezogen habe, ist ein Enum-CarType, AbstractCar hält einen CarType als Feld und die gesamte Implementierung erfolgt in der AbstractCar-Klasse mit if-Anweisungen zum Umschalten auf den richtigen FUEL_CAPACITY-Wert und einfach mit SmallCar und LargeCar als Konstruktoren oder Factory-Klassen ohne viele oder sogar tatsächliche Implementierungen.
Vielen Dank im Voraus für jede Hilfe Ich realisiere es ein bisschen langatmig, aber ich versuche sicherzustellen, dass ich die Konzepte, die wir lernen, vollständig verstehe und dass ich sie richtig implementiere anstatt nur etwas zusammen zu verpfuschen ' funktioniert, ist aber möglicherweise nicht die richtige oder eleganteste Lösung.
Sie können die Logik mit den Werten zum 'AbstractCar' übertragen. Dann setze diese Werte einfach in den Controller von 'SmallCar' und' LargeCar'. Dies wäre ein Ansatz. Wie du schon gesagt hast, musst du immer die gemeinsame Logik in der Elternklasse haben. Sie möchten doppelten Code vermeiden. Dann müssen Sie nur sicherstellen, dass Sie im Konstruktor andere Werte festlegen. Und wenn Sie den fixen Wert kennen, können Sie sogar die Angabe von Parametern für 'SmallCar' oder' LargeCar' weglassen und einfach diese festen Werte im 'super()' Aufruf innerhalb des Konstruktors setzen. –