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

Dies ist eine alte Version des Dokuments!


Konstruktoren und Vererbung

(A1) Ausprobieren

Der Konstruktor der Superklasse initialisiert die in der Superklasse festgelegten Attribute:

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
}

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?

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: 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!

  • 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.
FilenameFilesizeLast modified
03_vererbung_konstruktor.odp46.0 KiB10.11.2021 19:41
03_vererbung_konstruktor.pdf106.8 KiB10.11.2021 19:41
  • faecher/informatik/oberstufe/modellierung/vererbung/konstruktoren/start.1636626187.txt.gz
  • Zuletzt geändert: 11.11.2021 10:23
  • von sbel