Menu
Coddy logo textTech

Das Schlüsselwort super

Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy. Lektion 21 von 87.

Das Schlüsselwort super bietet eine Möglichkeit für eine Unterklasse, auf ihre Elternklasse zu verweisen. Es ist essenziell, wenn Sie auf Member oder Konstruktoren der Elternklasse aus einer Kindklasse heraus zugreifen müssen.

Die häufigste Verwendung von super ist der Aufruf des Konstruktors der Elternklasse. Dies muss die erste Anweisung im Konstruktor der Unterklasse sein:

public class Vehicle {
    private String brand;
    
    public Vehicle(String brand) {
        this.brand = brand;
    }
    
    public String getBrand() {
        return brand;
    }
}

public class Car extends Vehicle {
    private int doors;
    
    public Car(String brand, int doors) {
        super(brand);  // Muss die erste Zeile sein
        this.doors = doors;
    }
}

Sie können auch super verwenden, um Methoden der Elternklasse aufzurufen, was besonders nützlich ist, wenn die Unterklasse eine Methode mit demselben Namen hat:

public class Animal {
    public void makeSound() {
        System.out.println("Some sound");
    }
}

public class Cat extends Animal {
    public void makeSound() {
        super.makeSound();  // Ruft die Version von Animal auf
        System.out.println("Meow!");
    }
}

Betrachten Sie super als das Gegenteil von this. Während sich this auf das aktuelle Objekt bezieht, bezieht sich super auf den Teil der Elternklasse dieses Objekts. Diese Unterscheidung wird entscheidend, wenn Klassenhierarchien erstellt werden, in denen Kindklassen das Verhalten der Elternklasse erweitern und nicht vollständig ersetzen müssen.

challenge icon

Aufgabe

Einfach

Lass uns ein Gerätesystem erstellen, das demonstriert, wie Kindklassen super verwenden können, um Konstruktoren der Elternklasse aufzurufen und das Verhalten von Methoden der Elternklasse zu erweitern.

Du wirst drei Dateien erstellen, um deinen Code zu organisieren:

  • Appliance.java: Erstelle die Elternklasse, die ein beliebiges Haushaltsgerät repräsentiert. Sie sollte Folgendes enthalten:
    • Ein privates Feld für die brand des Geräts (String)
    • Ein privates Feld für wattage (int)
    • Einen Konstruktor, der beide Werte entgegennimmt und sie initialisiert
    • Eine Methode getBrand(), die die Marke zurückgibt
    • Eine Methode getWattage(), die die Leistungsaufnahme zurückgibt
    • Eine Methode getInfo(), die Folgendes zurückgibt: [brand] - [wattage]W
  • WashingMachine.java: Erstelle eine Unterklasse, die Appliance erweitert. Eine Waschmaschine verfügt über alles, was ein Gerät besitzt, sowie über eigene besondere Funktionen:
    • Ein privates Feld für capacity (int), das die Beladungskapazität in kg darstellt
    • Einen Konstruktor, der Marke, Leistungsaufnahme und Kapazität entgegennimmt – verwende super(brand, wattage), um den Teil der Elternklasse zu initialisieren, und setze anschließend die Kapazität
    • Eine Methode getCapacity(), die die Kapazität zurückgibt
    • Eine Methode getInfo(), die die Methode getInfo() der Elternklasse mithilfe von super.getInfo() aufruft und sie erweitert, sodass Folgendes zurückgegeben wird: [parent info], Capacity: [capacity]kg
  • Main.java: Erstelle eine WashingMachine und zeige ihre vollständigen Informationen an. Du erhältst drei Eingaben: die Marke (String), die Leistungsaufnahme (int) und die Kapazität (int). Gib das Ergebnis des Aufrufs von getInfo() für deine Waschmaschine aus.

Du erhältst drei Eingaben: den Markennamen, die Leistungsaufnahme und die Kapazität.

Beachte, dass super hier zwei Zwecke erfüllt: Es ruft den Konstruktor der Elternklasse auf, um geerbte Felder zu initialisieren, und ruft die Methode der Elternklasse auf, um auf ihrem Verhalten aufzubauen, anstatt es vollständig zu ersetzen.

Probier es selbst

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Eingaben lesen
        String brand = scanner.nextLine();
        int wattage = scanner.nextInt();
        int capacity = scanner.nextInt();
        
        // TODO: Erstelle ein WashingMachine-Objekt mit den Eingabewerten
        
        // TODO: Gib das Ergebnis des Aufrufs von getInfo() für die Waschmaschine aus
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Java-Compiler