Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
faecher:informatik:oberstufe:modellierung:vererbung:konstruktoren:start [11.11.2021 11:35] – [Konstruktoren und Vererbung] 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 ====== | ||
- | |||
- | {{: | ||
- | === (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> |