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

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
faecher:informatik:oberstufe:modellierung:vererbung:konstruktoren:start [11.11.2021 11:35] – [Konstruktoren und Vererbung] sbelfaecher: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 ====== 
  
- 
-{{: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 beobachtestdu 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?  
- Übung 10.6 Um zu veranschaulichen, dass eine Subklasse ohne eine besondere 
- 
- 
-===== 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<String> comments; 
- 
-    /** 
-     * Initialisiere die Felder von Beitrag 
-     */ 
-    public Beitrag(String author) 
-    { 
-        username = author; 
-        timestamp = System.currentTimeMillis(); 
-        likes = 0; 
-        comments = new ArrayList<>(); 
-    } 
- 
-    // weitere Methoden 
-} 
-</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 ==== 
- 
-{{simplefilelist>.:*}}  
  • faecher/informatik/oberstufe/modellierung/vererbung/konstruktoren/start.1636626950.txt.gz
  • Zuletzt geändert: 11.11.2021 11:35
  • von sbel