Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:modellierung:vererbung:konstruktoren:start [10.11.2021 19:34] – angelegt sbel | faecher:informatik:oberstufe:modellierung:vererbung:konstruktoren:start [12.10.2023 10:22] (aktuell) – [Konstruktoren und Vererbung] Svenja Müller | ||
---|---|---|---|
Zeile 2: | Zeile 2: | ||
+ | {{: | ||
+ | === (A1) Ausprobieren === | ||
+ | |||
+ | Experimentiere zunächst mit der Vorlage von https:// | ||
+ | |||
+ | Die Diagramme in der BlueJ-Oberfläche zeigen die Vererbungsbeziehungen an. | ||
+ | |||
+ | * Öffne den Quelltext der Klasse '' | ||
+ | * Erzeuge ein TextBeitrags-Objekt. Rufe einige seiner Methoden auf. Kannst du auch die geerbten Methoden aufrufen, z.B '' | ||
+ | |||
+ | |||
+ | |||
+ | ===== 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 ('' | ||
+ | *** Wenn der Programmierer keinen '' | ||
+ | * Der '' | ||
+ | |||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Material ==== | ||
+ | |||
+ | {{simplefilelist> |