faecher:informatik:oberstufe:modellierung:vererbung:konstruktoren:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:modellierung:vererbung:konstruktoren:start [10.11.2021 19:36] – [Konstruktoren und Vererbung] sbelfaecher:informatik:oberstufe:modellierung:vererbung:konstruktoren:start [12.10.2023 10:22] (aktuell) – [Konstruktoren und Vererbung] Svenja Müller
Zeile 1: Zeile 1:
 ====== Konstruktoren und Vererbung ====== ====== Konstruktoren und Vererbung ======
  
 +
 +{{:aufgabe.png?nolink  |}}
 +=== (A1) Ausprobieren ===
 +
 +Experimentiere zunächst mit der Vorlage von https://codeberg.org/qg-info-unterricht/school-net-qg-v2. Die Vorlage enthält eine Version des NewsFeeds, in der Vererbung wie bisher besprochen implementiert ist. 
 +
 +Die Diagramme in der BlueJ-Oberfläche zeigen die Vererbungsbeziehungen an. 
 +
 +  * Öffne den Quelltext der Klasse ''TextBeitrag()'' und entferne "extends Beitrag" in der Klassendefinition. Übersetze die Klasse erneut. Welche Veränderung beobachtest du am Klassendiagramm? Füge anschließend "extends Beitrag" wieder ein. 
 +  * Erzeuge ein TextBeitrags-Objekt. Rufe einige seiner Methoden auf. Kannst du auch die geerbten Methoden aufrufen, z.B ''erfasseKommentar''? Was beobachtest du bei den geerbten Methoden? 
 +
 +
 +
 +===== Superklasse =====
 + 
 Der Konstruktor der Superklasse initialisiert die in der Superklasse festgelegten Attribute: Der Konstruktor der Superklasse initialisiert die in der Superklasse festgelegten Attribute:
  
Zeile 25: Zeile 40:
 } }
 </code> </code>
 +
 +
 +===== 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:** Auch der ''TextBeitrag'' hat einen Autor – bei der Instanziierung eines TextBeitrags muss also das von der Superklasse geerbte Attribut ''username'' mit dem Parameter ''author'' initialisiert werden, aber wie?
 +<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
 +}
 +</code>
 +
 +**Lösung:** Der Konstruktor der abgeleiteten Klasse ruft **immer** den Konstruktor der Superklasse auf: ''super(…parameter…);''  So werden alle geerbten Attribute initialisisert, wenn ein Objekt der abgeleiteten Klasse instanziiert wird.
 +
 +**Achtung:** Wenn der super-Aufruf nicht explizit angegeben wird, wird super implizit ohne Argumente aufgerufen!
 +
 +===== 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.
 +
 +
 +</WRAP>
  
 ==== Material ==== ==== Material ====
  
 {{simplefilelist>.:*}}  {{simplefilelist>.:*}} 
  • faecher/informatik/oberstufe/modellierung/vererbung/konstruktoren/start.1636573005.txt.gz
  • Zuletzt geändert: 10.11.2021 19:36
  • von sbel