Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
faecher:informatik:oberstufe:modellierung:vererbung:konstruktoren:start [10.11.2021 20:40] – [Zusammenfassung] sbel | faecher:informatik:oberstufe:modellierung:vererbung:konstruktoren:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Konstruktoren und Vererbung ====== | ||
- | ===== Superklasse ===== | ||
- | |||
- | Der Konstruktor der Superklasse initialisiert die in der Superklasse festgelegten Attribute: | ||
- | |||
- | <code java> | ||
- | public class Beitrag | ||
- | { | ||
- | private String username; | ||
- | private long timestamp; | ||
- | private int likes; | ||
- | private ArrayList< | ||
- | |||
- | /** | ||
- | * Initialisiere die Felder von Beitrag | ||
- | */ | ||
- | public Beitrag(String author) | ||
- | { | ||
- | username = author; | ||
- | timestamp = System.currentTimeMillis(); | ||
- | likes = 0; | ||
- | comments = new ArrayList<> | ||
- | } | ||
- | |||
- | // weitere Methoden | ||
- | } | ||
- | </ | ||
- | |||
- | |||
- | ===== Was macht der Konstruktor einer abgeleiteten Klasse? ===== | ||
- | |||
- | Bei der Instanziierung eines Objekts einer abgeleiteten Klasse wird zunächst immer der Konstruktor der abgeleiteten Klasse aufgerufen. | ||
- | |||
- | **Problem: | ||
- | <code java> | ||
- | public class TextBeitrag extends Beitrag | ||
- | { | ||
- | private String message; | ||
- | |||
- | /** | ||
- | * Konstruktor fuer TextBeitrag-Objekte | ||
- | */ | ||
- | public TextBeitrag(String author, String text) | ||
- | { | ||
- | // PROBLEM: username muss irgendwie auf author | ||
- | // gesetzt werden?! | ||
- | |||
- | // das ist klar. | ||
- | message = text; | ||
- | } | ||
- | |||
- | // methods omitted | ||
- | } | ||
- | </ | ||
- | |||
- | **Lösung: | ||
- | |||
- | **Achtung: | ||
- | |||
- | ===== Zusammenfassung ===== | ||
- | |||
- | <WRAP center round box 90%> | ||
- | * Die Konstruktoren abgeleiteter Klassen müssen immer einen Aufruf des Konstruktors der Superklasse (super) beinhalten. | ||
- | * Wenn der Programmierer keinen super-Aufruf in seinen Code einfügt, macht das der Compiler. | ||
- | Dann wird super ohne Parameter aufgerufen – das geht schief, wenn der Konstruktor der Superklasse Parameter benötigt. | ||
- | * Der super-Aufruf muss das erste Statement im Konstruktor der abgeleiteten Klasse sein. | ||
- | |||
- | |||
- | </ | ||
- | |||
- | ==== Material ==== | ||
- | |||
- | {{simplefilelist> |