Falls ich es so richtig verstanden haben sollte ...)
Wann macht es Sinn, den übergebenen Superklasse-Typ --- Person --- in der Methode --- doWork() --- beizubehalten, wenn man die nächste Methode --- live() --- aufruft, und nicht einfach ein Subklasse-Objekt --- User --- für den Aufruf der nächsten Methode zu erstellen?
(Die Sätze wurden ausgegeben.)
Praxis-Beispiel(e) gewünscht
In der Diskussion
Kommentare (3)
- Beliebt
- Neu
- Alt
Du musst angemeldet sein, um einen Kommentar schreiben zu können
Thomas
3 Dezember 2022, 15:53nützlich
+1
Thomas
3 Dezember 2022, 15:55nützlich
Wenn du gegen den Interfacetyp programmierst, dann kannst du ein Objekt gegen ein anderes während der Laufzeit austauschen und die Methoden des Basistyps aufrufen, hier also Print.
Du verwendest also Printer und dahinter können alle möglichen anderen Typen stehen. Welche das genau sind interessiert aber überhaupt nicht. Du könntest einfach in deinem Programm einen neuen Typ erstellen. Das einzige was du machen müßtest, ist, die neue Klasse Printer implementieren lassen und dem Type enum und der Factory-Klasse die neue Klasse bekannt machen.
Der Rest der Aufgabe, das Casten, ist nur gut, wenn du einen super duper Spezialdrucker hast, der z.B. noch Kaffee kocht. Das zerschießt dir aber jetzt den tollen Aufbau und du musst das printer Objekt fragen, ob es Kaffee kochen kann (printer instanceof CoffeePrinter -> cast to CoffeePrinter und printer.makeCoffee())...
Das sind aber imho Notlösungen.
+1
claudia
6 Dezember 2022, 13:20
Ich bin platt, danke, Thomas, dass du dir so viel Mühe gemacht hast!
Und danke für das verständliche Beispiel!
(Und imho kenne ich nun auch 😊.)
+1