Wie löst man die Aufgabe (Java, Vererbung)?
Gegeben der folgende Java Quellcode, der vier Klassen (O, X, T und M) verwendet und von jeder Klasse ein Objekt erzeugt.
O o = new O();
X x = new X();
T t = new T();
M m = new M();
Die folgenden Zuweisungen sind allesamt legal (sie lassen sich übersetzen):
m = t; m = x; o = t;
Die folgenden Zuweisungen sind allesamt illegal (sie führen zu Übersetzungsfehlern):
o = m; o = x; x = o;
a) Was können Sie über die Vererbungsbeziehungen dieser Klassen zueinander aussa- gen?
(Meine Vermutung aber ich weiß auch nicht wieso: T erbt von M, X erbt von M, T erbt von O)
b) Geben Sie ein UML-Diagramm der Vererbungshierarchie an und begründen Sie.
Kann mir bitte jemand sagen wie man so eine Aufgabe löst?
Danke im Voraus
1 Antwort
Du musst für diese Aufgabe an sich nur Polymorphie und Vererbung verstehen.
Nehmen wir einmal an, es gibt diese beiden Klassen, die in einem Eltern-Kind-Verhältnis stehen:
class Animal {
public void run() {
}
}
class Elephant extends Animal {
public void toot() {
}
}
Die Subklasse Elephant erbt alle von außen zugreifbaren Methoden und Eigenschaften der Klasse Animal.
Elephant dumbo = new Elephant();
dumbo.run();
Es ist in diesem Sinne also auch legitim zu sagen, das ein Elefant einem Tier entspricht.
Animal dumbo = new Elephant();
dumbo.run();
Andersherum funktioniert das aber nicht. Nicht jedes Tier ist auch ein Elefant. Nur der Elefant weiß, wie man trötet.
Elephant dumbo = new Animal(); // error
dumb.toot();
Für den zweiten Teil der Aufgabe kannst du den Wikipedia-Artikel zu Klassendiagrammen nutzen. Relevant für dich ist insbesondere die Generalisierung.
Deine Lösung ist an sich richtig, doch es fehlt noch etwas. T passt in O und M, kann aber nur von einer Basisklasse direkt erben (bzw. eine Klasse kann nur eine, nicht mehrere Basisklassen haben). Das bedeutet, zwischen O und M muss noch eine Vererbungsbeziehung bestehen.
Nein, O ist eine Basisklasse von T.
Um es wieder mit einfacheren Namen zu beschreiben:
Animal > Elephant > African (Savanna) Elephant
Ein afrikanischer Elefant ist sowohl ein Elefant, als auch ein Tier. Ein Elefant ist ein Tier. Daher klappen all diese Zuweisungen:
Animal animal = new AfricanElephant();
Elephant animal2 = new AfricanElephant();
Animal animal3 = new Elephant();
Die Klasse T ist bei dir gleichbedeutend mit dem afrikanischen Elefant. Wo nun M und O in dieser Vererbungskette stehen, kannst du anhand der illegalen Regeln ermitteln.
Danke sehr! Also war meine Vermutung in Aufgabe a) richtig? Die Aufgabe mit dem UML ist eigentlich kein Problem Spezialisierung und Generalisierung verstehe ich auch soweit