10.3 Substitutionsprinzip

Eine Unterklasse verfügt über alle Attribute und Methoden ihrer Oberklasse. Daher kann ein Objekt der Unterklasse jederzeit anstelle eines Objekts ihrer Oberklasse eingesetzt werden (Substitutionsprinzip). Da eine Unterklasse jedoch über zusätzliche Attribute und Methoden verfügen kann, ist dies umgekehrt nicht möglich!

Merke: Substitutionsprinzip
Beispiel

Jedes Vereinsvorstand besitzt die Eigenschaften und Fähigkeiten eines Vereinsmitglieds. Darüber hinaus verfügt ein Vereinsvorstand über das Attribut aufgabe.

img/Abb_10_8_SubstitutionBeispiel.svg
Abb. 10-8: Vereinsvorstand erweitert Vereinsmitglied (UML)

Abbildung 10-9a zeigt die Testklasse SubstitutionBeispiel. In deren Konstruktor wird jeweils ein Objekt der Klassen Vereinsmitglied und Vereinsvorstand erzeugt. Außerdem werden allen Attributen der beiden Objekte Testwerte zugewiesen.

Anschließend sollen Vor- und Nachname des Vereinsmitglieds und des Vereinsvorstands auf der Konsole ausgegeben werden.

Dazu besitzt die Klasse SubstitutionBeispiel zwei Methoden. Die Methode zeigeMitgliedsdaten(pMitglied: Vereinsmitglied) gibt Vor- und Nachnamen eines Vereinsmitglieds aus, die Methode zeigeMitgliedsdatenVorstand(pVorstand: Vereinsvorstand) Vor- und Nachnamen eines Vereins­vorstands.

JAVA
public class SubstitutionBeispiel {

    public SubstitutionBeispiel() {
        Vereinsmitglied mitglied = new Vereinsmitglied("Max", "Maier");
        Vereinsvorstand vorstand = new Vereinsvorstand("Moritz", "Müller");
        
        vorstand.setAufgabe("Sportwart");

        this.zeigeMitgliedsdaten(mitglied);
        this.zeigeMitgliedsdatenVorstand(vorstand);
    }
    
    public void zeigeMitgliedsdaten(Vereinsmitglied pMitglied) {
        System.out.println(pMitglied.getVorname() + " " + pMitglied.getNachname());
    }

    public void zeigeMitgliedsdatenVorstand(Vereinsvorstand pVorstand) {
        System.out.println(pVorstand.getVorname() + " " + pMitglied.getNachname());
    }

}
Abb. 10-9a: Beispiel ohne Substitution

Da die Klasse Vereinsvorstand eine Unterklasse von Vereinsmitglied ist, verfügt ein Vereinsvorstand-Objekt auch über alle Attribute und Methoden, die ein Vereinsmitglied-Objekt besitzt. Gemäß dem Substitutionsprinzip kann ein Vereinsvorstand-Objekt daher stets anstelle eines Vereinsmitglied-Objekts verwendet werden. Der Methode zeigeMitgliedsdaten(pMitglied: Vereinsmitglied) darf somit auch ein Objekt der Klasse Vereinsvorstand übergeben werden. Allerdings sind in diesem Fall nur die gemeinsamen Attribute und Methoden verfügbar. Die Methode zeigeMitgliedsdatenVorstand(pVorstand: Vereinsvorstand) ist daher überflüssig (vgl. Abbildung 10-9b).

JAVA
public class SubstitutionBeispiel {

    public SubstitutionBeispiel() {
        Vereinsmitglied mitglied = new Vereinsmitglied("Max", "Maier");
        Vereinsvorstand vorstand = new Vereinsvorstand("Moritz", "Müller");
        
        vorstand.setAufgabe("Sportwart");

        this.zeigeMitgliedsdaten(mitglied);
        this.zeigeMitgliedsdaten(vorstand);
    }
    
    public void zeigeMitgliedsdaten(Vereinsmitglied pMitglied) {
        System.out.println(pMitglied.getVorname() + " " + pMitglied.getNachname());
    }

}
Abb. 10-9b: Beispiel mit Substitution
Konsole
Max Maier
Moritz Müller
Abb. 10-10: Ausgabe auf der Konsole