Java Inheritance
Java Vererbung ist ein grundlegendes Konzept in der objektorientierten Programmierung, das es einer neuen Klasse ermöglicht, Eigenschaften und Verhaltensweisen (Felder und Methoden) von einer bestehenden Klasse zu erben. Dies fördert die Wiederverwendbarkeit des Codes und stellt eine hierarchische Beziehung zwischen den Klassen her.
Schlüsselkonzepte
- Superklasse (übergeordnete Klasse): Die Klasse, deren Eigenschaften und Methoden vererbt werden.
- Unterklasse (Child Class): Die Klasse, die von der Oberklasse erbt.
Verwendung
Vererbung wird verwendet, um eine neue Klasse zu erstellen, die ein Typ einer bestehenden Klasse ist. Sie hilft dabei, die Funktionalität einer Klasse zu erweitern, ohne sie zu verändern, und hält sich damit an das Open/Closed-Prinzip des Softwaredesigns.
Syntax
class Superclass {
// fields and methods
}
class Subclass extends Superclass {
// additional fields and methods
}
Beispiele
Beispiel 1: Grundlegende Vererbung
class Animal {
void eat() {
System.out.println("This animal eats food.");
}
}
class Dog extends Animal {
void bark() {
System.out.println("The dog barks.");
}
}
public class InheritanceExample {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat(); // Inherited method
dog.bark(); // Subclass method
}
}
In diesem Beispiel ist Dog
eine Unterklasse, die die Methode eat
von der Oberklasse Animal
erbt. Die Klasse Dog
hat auch eine eigene Methode, bark
.
Beispiel 2: Überschreibende Methoden
class Vehicle {
void run() {
System.out.println("The vehicle is running.");
}
}
class Car extends Vehicle {
@Override
void run() {
System.out.println("The car is running safely.");
}
}
public class MethodOverridingExample {
public static void main(String[] args) {
Car car = new Car();
car.run(); // Overridden method
}
}
Hier überschreibt die Klasse Car
die Methode run
der Klasse Vehicle
, um eine spezielle Implementierung zu ermöglichen.
Beispiel 3: Mit super
Schlüsselwort
class Person {
String name = "John";
void display() {
System.out.println("Person's name: " + name);
}
}
class Employee extends Person {
String name = "Doe";
void display() {
System.out.println("Employee's name: " + name);
super.display(); // Call superclass method
}
}
public class SuperKeywordExample {
public static void main(String[] args) {
Employee emp = new Employee();
emp.display();
}
}
In diesem Beispiel wird das Schlüsselwort super
verwendet, um die Methode display
der Oberklasse Person
aus der Unterklasse Employee
aufzurufen.
Tipps und bewährte Praktiken
- Setze die Vererbung mit Bedacht ein: Verwende die Vererbung nur, wenn es eine echte "ist-a"-Beziehung gibt. Eine
Dog
ist zum Beispiel eineAnimal
. - Vermeide tiefe Vererbungshierarchien: Halte Vererbungshierarchien flach, um die Einfachheit zu erhalten und die Komplexität zu reduzieren.
- Ziehe Komposition der Vererbung vor: Erwäge die Verwendung von Komposition (has-a-Beziehung) anstelle von Vererbung, wenn es angebracht ist, da dies mehr Flexibilität bietet.
- Verwende
@Override
Annotation: Verwende immer die@Override
Annotation, wenn du Methoden überschreibst, um die Lesbarkeit des Codes zu verbessern und Fehler zu vermeiden. - Zugangskontrolle: Verwende den Zugriffsmodifikator
protected
für Oberklassenelemente, die in Unterklassen zugänglich sein sollen, aber nicht für die Außenwelt.