Grundlegende Vererbung (extends)
Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy. Lektion 20 von 87.
Vererbung ist eine der Kernsäulen der OOP. Sie ermöglicht es einer Klasse, die Eigenschaften und Methoden einer anderen Klasse zu übernehmen, was die Wiederverwendung von Code fördert und eine natürliche Hierarchie zwischen Klassen etabliert.
In Java erstellen Sie eine Vererbungsbeziehung mit dem Schlüsselwort extends. Die Klasse, die erbt, wird als Subklasse (oder Kindklasse) bezeichnet, und die Klasse, von der geerbt wird, ist die Superklasse (oder Elternklasse).
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println(name + " is eating");
}
public String getName() {
return name;
}
}
public class Dog extends Animal {
public Dog(String name) {
super(name); // Ruft den Konstruktor der Elternklasse auf
}
public void bark() {
System.out.println(getName() + " says woof!");
}
}Die Klasse Dog erbt automatisch die Methode eat() und die Methode getName() von Animal. Sie kann auch eigene Methoden wie bark() definieren:
Dog myDog = new Dog("Buddy");
myDog.eat(); // Geerbt: "Buddy is eating"
myDog.bark(); // Eigene Methode: "Buddy says woof!"Stell dir Vererbung als eine „ist-ein“-Beziehung vor. Ein Dog ist ein Animal, daher ergibt es Sinn, dass Dog Animal erweitert. Diese Beziehung ermöglicht es dir, spezialisierte Klassen zu erstellen, die gemeinsame Funktionalität teilen und gleichzeitig ihr eigenes einzigartiges Verhalten hinzufügen.
Aufgabe
EinfachErstelle ein einfaches Fahrzeugsystem, das Vererbung in der Praxis demonstriert. Du erstellst eine übergeordnete Klasse, die gemeinsame Eigenschaften von Fahrzeugen enthält, und eine untergeordnete Klasse, die sie um spezielles Verhalten erweitert.
Du organisierst deinen Code auf drei Dateien verteilt:
Vehicle.java: Erstelle die übergeordnete Klasse, die ein beliebiges Fahrzeug darstellt. Sie sollte Folgendes enthalten:- Ein privates Feld für die
branddes Fahrzeugs (String) - Einen Konstruktor, der den Markennamen entgegennimmt und ihn dem Feld zuweist. (Hier ist kein Aufruf von
super()erforderlich, da Vehicle an der Spitze der Hierarchie steht.) - Eine Methode
getBrand(), die die Marke zurückgibt - Eine Methode
start(), die Folgendes ausgibt:[brand] is starting
- Ein privates Feld für die
Motorcycle.java: Erstelle eine Unterklasse, die Vehicle erweitert. Ein Motorrad ist ein Fahrzeug, daher ist diese „ist-ein“-Beziehung ein geeigneter Anwendungsfall für Vererbung. Deine Motorcycle sollte:extendsverwenden, um von Vehicle zu erben- Einen Konstruktor haben, der die Marke entgegennimmt und sie mit
super(brand)an die übergeordnete Klasse übergibt - Eine eigene Methode
wheelie()hinzufügen, die Folgendes ausgibt:[brand] is doing a wheelie!
Main.java: Führe alles zusammen, indem du ein Motorcycle-Objekt erstellst und sowohl geerbtes als auch eigenes Verhalten demonstrierst. Du erhältst eine Eingabe: den Markennamen. Gib zwei Zeilen aus, indem du Folgendes aufrufst:- Die geerbte Methode
start() - Die eigene Methode
wheelie()von Motorcycle
- Die geerbte Methode
Du erhältst eine Eingabe: den Markennamen (String) für dein Motorrad.
Beachte, dass deine Motorcycle automatisch Zugriff auf start() und getBrand() hat, ohne diese neu schreiben zu müssen – das ist die Stärke der Vererbung!
Probier es selbst
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String brand = scanner.nextLine();
// TODO: Erstelle ein Motorcycle-Objekt mit der brand
// TODO: Rufe die geerbte start()-Methode auf
// TODO: Rufe die wheelie()-Methode auf
}
}
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