Erste Schritte Extends Implements

Kros

Mitglied
Hallo Zusammen

Habe mich durch diverse Internetseiten und Tutorials durchgelesen, jedoch hat es noch nicht klick gemacht. Es geht um Vererbungen, beziehungsweise Mehrfachvererbungen, welche in Java nicht unterstützt werden.

Nehmen wir mal an, Ich habe folgende Klassen:

Code:
----------------          ----------------          ----------------          ----------------
Auto                      Fahrrad                   Fahrzeug                  Sammlerstück
--                        --                        --                        --
Leistung                  Raddurchmesser            Geschwindigkeit           Wert
--                        --                        --                        --
getLeistung()             getRaddurchmesser()       getGeschwindigkeit()      getWert()
setLeistung()             setRaddurchmesser()       setGeschwindigkeit()      setWert()
----------------          ----------------          ----------------          ----------------

Wenn ich die mögliche Vererbung nun betrachte sieht das wie folgt aus

Nun kann ein Auto von Fahrzeug wie auch von Sammlerstück erben.
Das selbe gilt für das Fahrrad.

Ist nur ein Beispiel, jedoch wie kann man die Situation in Java lösen? Mit Interface? Da kann man aber keine Variabeln sondern nur Konstanten deklarieren.
 
Danke für den Tip. Habs mal durchgelesen und muss es morgen nochmal durchlesen. Es erklärt aber schonmal mehr als das was ich bis jetzt gelesen habe. Dabei liest es sich auch noch etwas Frech 🙂.

Das ganze bedeutet wohl, das mein Gewolltes nicht möglich ist. Äpfel und Birnen sind nicht das selbe, obwohl beide Kerne haben, halt unterschiedliche Kerne.
 
ich würde hier Auto und Fahrrad von Fahrzeug erben lassen und Sammlerstueck als Marker-Interface verwenden ... wobei man dann eher in die richtung von abstrakten klassen und factories gehen sollte ... denn nicht jedes x-beliebige fahrrad soll ja auch ein sammlerstück sein ...
 
Oft begeht man da, wo man Mehrfachvererbung zu glauben braucht, nur einen "Kategorienfehler". Ein Auto ist erst einmal ein Auto, von seiner Konstruktion, seinen Funktionen und seinem Zweck her. Zu einem "Sammlerstück" macht es erst ein bestimmter Kontext, genauso wie eine Kloschüssel erst dann Kunst ist, wenn sie jemand mit genug Egozentrik dazu erklärt. Nichts "funktionales" an einem Auto ist notwendig, um es zu einem Sammlerstück zu machen, Sammlerstücke können wild zusammengewürfelte Dinge sein, physisch oder funktionell nichts miteinander zu tun haben. Aus diesem Grund würde ich eine Klasse "Sammerstück" vorschlagen, die eine Referenz auf ein Auto, eine Uhr oder eine Kloschüssel enthält.

Diese Lösung ist nicht optimal. Als Alternative wurde Role-Oriented Programming vorgeschlagen, das zwischen dem Objekt "an sich", und den Rollen, die es im jeweiligen Kontext spielt, unterscheidet. Interfaces und Komposition wie in Java können das nicht hundertprozentig abbilden. Insbesondere fehlt in Java das Konzept der Delegation, die entweder manuell oder mit Hilfe von Bibliotheken simuliert werden muss.

Ich würde vorschlagen, dich erst einmal auf die Beispiele zu beschränken, bei denen Vererbung wirklich "passt", anstatt pathologische Fälle wie diesen irgendwie in das vorhandene Schema zu pressen. Insbesondere solltest du dir das LSP genauer anschauen, denn viele praktische Probleme mit der Vererbung beruhen auf dessen Verletzung.
 
Zuletzt bearbeitet:

Zurück
Oben