Wie löst man die Aufgabe (Java, Vererbung)?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

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.

Klaus820 
Fragesteller
 23.01.2024, 16:02

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

0
regex9  23.01.2024, 16:14
@Klaus820

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.

1
Klaus820 
Fragesteller
 23.01.2024, 16:34
@regex9

Komme nicht drauf :(

Wäre das UML dann so vielleicht?

  | M |

^ ^
| |

 | T | | X |

^

|

| O |

0
regex9  23.01.2024, 16:53
@Klaus820

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.

0
Klaus820 
Fragesteller
 23.01.2024, 17:02
@regex9

Also erbt O von M und T von O?

0