Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
im Zusammenhang mit dem Polymorphismus begegnet man ja immer wieder dem instance Of Operator, um so über eine einheitliche Schnittstelle, Membervariablen oder Methode der darunterliegenden Klassen aufrufen zu können.
Gibt es aber nur die Möglichkeit, dieses über den instance Of Operator zu bewerkstelligen? Gibt es hier evtl. auch eine Methode ohne instance Of Operator, solchen Code noch allgemeiner und wartungsfreundlicher zu formulieren?
Was? Ich kann keinen sinnvollen Zusammenhang zwischen dem ersten Satz (der Aussage) und der Frage erkennen, bzw mir zusammen reimen.
Willst du Typen ohne instanceof testen? Wenn ja mal halt ein Type-Enum mit den Typen darin. Generell sollte man Hierarchien aber so definieren, dass man möglichst ohne instanceof auskommt (geht leider nicht immer, allein schon durch Generics).
Ich habe bszw. eine folgende Methode (diese befindet sich in einer Klasse Mechaniker):
Java:
public void prüfeFahrzeug(Auto auto){
}
Der Übergabeparameter ist vom Typ der Klasse Auto.
Die Klasse Auto besitzt aber noch zwei Unterklassen, z.B. ein Cabrio und ein LKW. Beide Unterklassen besitzen nun nicht nur die Attribute und Methode aus der gemeinsamen Oberklasse Auto, sondern besitzen auch noch eigene Membervariablen und eigene Methoden.
Nun möchte ich aber innerhalb der Methode "PrüfeFahrzeug" auf die Memberklassen und Methoden der beiden Unterklassen zugreifen und hier stellt sich eben für mich die Frage, ob ich immer zwingend über einen instance Of Operator abprüfen muss, um welchen Klassentypen es sich handelt und ob mal einen expliziten Cast durchführen muss, um entsprechenden Zugriff zu erhalten?
Ok, aber was konkret wäre denn hier ein besseres Design? Ich kenne bisher nur die Herangehensweise über einen instance Of Operator und einen Downcast, ich wüste nciht, wie ich mein Design da verbessern könnte bzw. warum mein jetziges Design überhaupt schlecht sein soll.
Muss der Mechaniker unbedingt wissen ob er ein Cabrio oder einen LKW repariert? Wenn ja, was für Gemeinsamkeiten gibts bei den beiden. Eventuell reicht dir ja schon nen Interface Repairable mit der Methode repair() die der Mechaniker dann aufrufen kann, dann liegt die Logik wie ein Auto zu reparieren ist in den Autos selbst. Da muss man aber etwas mehr Kontext kennen um sagen zu können ob das sinn macht oder nicht.
Wenn die Idee nicht gut ist dann bleibt dir noch die Möglichkeit die Methode zu überladen:
Java:
public void prüfeFahrzeug(Cabrio cabrio){
}
public void prüfeFahrzeug(LKW lkw){
}