Java von den Grundlagen bis zum Profi — Folge 4
Verwendung von Polymorphismus mit Vererbung und Schnittstellen
Die in diesem Blog verfassten Artikel wurden mit dem Ziel erstellt, zu unterrichten. Außerdem können die Informationen im Artikel falsch sein, also seien Sie bitte vorsichtig.
Schnittstellen und Vererbung können verwendet werden, wenn mehrere Objekte auf die gleiche Weise verwendet werden müssen. Der aufrufende Code ist resistenter gegen Änderungen, wenn er auf der erforderlichen Rolle und nicht auf einer bestimmten Klasse basiert.
Schnittstelle
public interface Damageable {
boolean isAlive();
void takeDamage(int amount);
}
public final class Monster implements Damageable {
private int health = 100;
@Override
public boolean isAlive() {
return health > 0;
}
@Override
public void takeDamage(int amount) {
health = Math.max(0, health - amount);
}
}
Der Angriffscode lautet „Beschädigbar“, nicht „Monster“. Auch wenn Sie später eine zerstörbare Box hinzufügen, kann dies mit demselben Vertrag gehandhabt werden.
Abstrakte Klassen und Vererbung
public abstract class Skill {
private final String name;
protected Skill(String name) {
this.name = name;
}
public String getName() {
return name;
}
public abstract void execute(Damageable target);
}
Abstrakte Klassen können einen gemeinsamen Status und eine gemeinsame Implementierung haben, während einige Verhaltensweisen ihren Kindern überlassen werden. Die Vererbung kombiniert auch die Regeln des übergeordneten Elements. Wenn Sie sie also für die einfache Wiederverwendung von Code vertiefen, erhöht sich der Umfang der Änderungen.
Polymorphismus
List<Damageable> targets = List.of(
new Monster(),
new TrainingDummy()
);
for (Damageable target : targets) {
target.takeDamage(10);
}
Auch wenn der gleiche Aufruf erfolgt, wird die für das eigentliche Objekt passende Implementierung ausgeführt. Der Aufrufer muss mit „instanceof“ nicht alle konkreten Typen auflisten.
Schnittstellen drücken Rollen aus und abstrakte Klassen bieten eine gemeinsame Grundlage. Wenn Sie kleine, zusammensetzbare Objekte kombinieren können, ist dies oft einfacher als die Vererbung.