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.
Aufgabe
EinfachLass 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
branddes 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
- Ein privates Feld für die
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 MethodegetInfo()der Elternklasse mithilfe vonsuper.getInfo()aufruft und sie erweitert, sodass Folgendes zurückgegeben wird:[parent info], Capacity: [capacity]kg
- Ein privates Feld für
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 vongetInfo()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
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas Schlüsselwort thisMethodenFelder (Attribute)KonstruktormethodeÜberladen von KonstruktorenRückblick – Einfacher Taschenrechner4Vererbung
Grundlegende Vererbung (extends)Das Schlüsselwort superÜberschreiben von Methoden (@Override)KonstruktorverkettungDie Object-KlasseEinfach- und mehrstufige VererbungWarum keine Mehrfachvererbung von KlassenRückblick – Mitarbeiterhierarchie7Spezielle Methoden & Object-Klasse
toString()-Methodeequals() und hashCode()clone()-MethodecompareTo() und ComparableComparator-SchnittstelleRückblick – Benutzerdefinierte Sortierung2Zugriffsmodifikatoren & Kapselung
Übersicht der ZugriffsebenenGetter- und Setter-MethodenInformationsverbergungDas Schlüsselwort finalRückblick – Bankkontoverwaltung5Polymorphismus
Grundlagen der MethodenüberladungMethodenüberschreibung (Laufzeit)Upcasting und DowncastingDer instanceof-OperatorAbstrakte Klassen und MethodenRückblick – Formrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungAggregation vs. KompositionInnere, verschachtelte & anonyme KlassenEnums und Enum-MethodenRecords (Java 16+)Versiegelte Klassen (Java 17+)11Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterBuilder-MusterObserver-MusterStrategie-Muster14Abschließende Herausforderungen
E-Learning-PlattformBankingsystemEntwicklung einer SpielfigurFahrzeugvermietungsdienst3Klassen-Props & statische Member
Instanz- vs. statische VariablenStatische MethodenStatische BlöckeKonstanten (static final)Wiederholung – Counter & Utility6Schnittstellen & abstrakte Klassen
Einführung in InterfacesInterfaces implementierenMehrere Interfaces implementierenDefault & Static in InterfacesAbstrakte Klassen vs. InterfacesFunktionale InterfacesRückblick – ZahlungssystemÜbe selbstständig: Online-Java-Compiler