Menu
Coddy logo textTech

Grundlagen der Vererbung (extends)

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

Vererbung ist einer der Kernpfeiler der OOP. Sie ermöglicht es einer Klasse, die Eigenschaften und Methoden einer anderen Klasse zu übernehmen, was die Wiederverwendbarkeit 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 definieren, wie zum Beispiel bark():

Dog myDog = new Dog("Buddy");
myDog.eat();   // Geerbt: "Buddy is eating"
myDog.bark();  // Eigene Methode: "Buddy says woof!"

Betrachten Sie Vererbung als eine „ist-ein“-Beziehung. Ein Dog ist ein Animal, daher ist es sinnvoll, dass Dog Animal erweitert. Diese Beziehung ermöglicht es Ihnen, spezialisierte Klassen zu erstellen, die gemeinsame Funktionalitäten teilen und gleichzeitig ihre eigenen einzigartigen Verhaltensweisen hinzufügen.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein einfaches Fahrzeugsystem bauen, das Vererbung in Aktion demonstriert. Sie werden eine Elternklasse erstellen, die allgemeine Fahrzeugeigenschaften enthält, und eine Kindklasse, die diese um spezialisiertes Verhalten erweitert.

Sie werden Ihren Code über drei Dateien organisieren:

  • Vehicle.java: Erstellen Sie die Elternklasse, die ein beliebiges Fahrzeug repräsentiert. Sie sollte Folgendes haben:
    • Ein privates Feld für die brand des Fahrzeugs (String)
    • Einen Konstruktor, der den Markennamen akzeptiert; die Verwendung von super() ist hier nicht erforderlich, da Vehicle die Elternklasse ist
    • Eine Methode getBrand(), die die Marke zurückgibt
    • Eine Methode start(), die Folgendes ausgibt: [brand] is starting
  • Motorcycle.java: Erstellen Sie eine Unterklasse, die Vehicle erweitert. Ein Motorrad ist ein Fahrzeug, daher macht diese "ist-ein"-Beziehung die Vererbung angemessen. Ihr Motorcycle sollte:
    • extends verwenden, um von Vehicle zu erben
    • Einen Konstruktor haben, der die Marke entgegennimmt und sie mit super(brand) an die Elternklasse übergibt
    • Eine eigene Methode wheelie() hinzufügen, die Folgendes ausgibt: [brand] is doing a wheelie!
  • Main.java: Bringen Sie alles zusammen, indem Sie ein Motorcycle-Objekt erstellen und sowohl geerbte als auch einzigartige Verhaltensweisen demonstrieren. Sie erhalten eine Eingabe: den Markennamen. Geben Sie zwei Zeilen aus, indem Sie Folgendes aufrufen:
    • Die geerbte Methode start()
    • Die eigene Methode wheelie() des Motorcycle

Sie erhalten eine Eingabe: den Markennamen (String) für Ihr Motorrad.

Beachten Sie, wie Ihr Motorcycle automatisch Zugriff auf start() und getBrand() hat, ohne diese neu schreiben zu müssen - das ist die Stärke der Vererbung!

Spickzettel

Verwenden Sie das extends-Schlüsselwort, um eine Vererbungsbeziehung zwischen Klassen zu erstellen:

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 Unterklasse (Kindklasse) erbt alle Methoden von der Oberklasse (Elternklasse) und kann eigene hinzufügen:

Dog myDog = new Dog("Buddy");
myDog.eat();   // Geerbte Methode
myDog.bark();  // Eigene Methode

Verwenden Sie super() im Konstruktor der Unterklasse, um den Konstruktor der Elternklasse aufzurufen.

Vererbung stellt eine „ist-ein“-Beziehung zwischen Klassen dar.

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
    }
}
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