====== Besser mit Vererbung ====== Die beiden Arten von Beiträgen sind sich sehr ähnlich und teilen sich zahlreiche Attribute und Methoden. Es existiert also gewissermaßen eine "übergeordnete Klasse "(//Superklasse//, //Super// im Sinne von englisch "oberhalb"), die bereits zahlreiche gemeinsame Aspekte abdeckt. Die Beitragsarten müssen dann nur noch die Unterschiede definieren. Diese Super-Klasse könnte z.B. ''Beitrag'' heißen, denn die beiden Beitragsarten sind ja auch beides "Beiträge". ---- {{:aufgabe.png?nolink |}} === (A1) === Notiere, welche Attribute/Methoden die Super-Klasse haben sollte und in welchen welche Attributen und Methoden sich die beiden Arten von Beiträgen unterscheiden: ^ ^ Beitrag ........ ^ PhotoBeitrag ...... ^ TextBeitrag ...... ^ | Attribute | | \\ \\ \\ | | | Methoden | | \\ \\ \\ | | ==== Darstellung im UML-Diagramm ==== Nun benötigt man noch eine Darstellung, die veranschaulicht, dass die gemeinsamen Attribute und Methoden der Superklasse auch den "abgeleiteten" Klassen zur Verfügung stehen. In einem Entwurfs/Implementationsdiagramm stellt man das durch Pfeile mit leeren Pfeilspitzen von der abgeleiteten Klasse zur Super-Klasse dar: {{ :faecher:informatik:oberstufe:modellierung:vererbung:besser:vererbung_soz_net.drawio.png |}} Das bedeutet, die Klassen ''TextBeitrag'' und ''PhotoBeitrag'' **erweitern** die Klasse ''Beitrag'' - sie **erben** alle Attribute und Methoden der Super-Klasse, können aber eigene Attribute und Methoden hinzufügen. ==== Vererbung ganz praktisch ==== * Definiere die **Superklasse**: ''Beitrag'' * Definiere **Unterklassen** für ''TextBeitrag'' und ''PhotoBeitrag'' * Die Superklasse legt gemeinsame Attribute und Methoden fest * Die Unterklassen **erben** die Eigenschaften der Superklasse. * Die Unterklassen fügen weitere, unterschiedliche Eigenschaften hinzu. ==== Wie sieht das im Java Code aus? ==== {{ :faecher:informatik:oberstufe:modellierung:vererbung:besser:auswahl_089.png |}} ---- {{:aufgabe.png?nolink |}} === (A2) === Implementiere die Klassendefinitionen der Klassen ''Beitrag'', ''PhotoBeitrag'' und ''TextBeitrag'' mit ihren Attributen, aber zunächst ohne Konstruktoren und Methoden. ---- === Material === {{simplefilelist>.:*}}