Also habe ich diese Frage schon einmal gestellt, aber ich hatte einen Fehler im Code, den die meisten Leute aufgriffen, anstatt das Problem selbst.Java: Ersetzen einer Unterklasse/Unterart eines Parameters beim Überschreiben einer Methode?
Wie auch immer, ich versuche, eine Interface-Methode in einer Klasse zu überschreiben. Ich möchte jedoch, dass der Typ des Parameters in der überschreibenden Methode eine Unterklasse des Typs des Parameters ist, wie er in der Methode overriden definiert ist.
Die Schnittstelle ist:
public interface Observer {
public void update(ComponentUpdateEvent updateEvent) throws Exception;
}
Während die Klasse, die diese Methode überschreibt ist:
public class ConsoleDrawer extends Drawer {
//...
@Override
public void update(ConsoleUpdateEvent updateEvent) throws Exception {
if (this.componentType != updateEvent.getComponentType()) {
throw new Exception("ComponentType Mismatch.");
}
else {
messages = updateEvent.getComponentState();
}
}
//...
}
ConsoleUpdateEvent eine Unterklasse von ComponentUpdateEvent ist.
Jetzt könnte ich nur die update() -Methode in ConsoleDrawer ein ComponentUpdateEvent als Parameter und dann auf ein ConsoleUpdateEvent werfen, aber ich suche nach einer etwas eleganteren Lösung, wenn möglich. Anyhelp würde geschätzt werden. Vielen Dank.
Ich glaube nicht, dass dies möglich ist, da es dem Prinzip einer Schnittstelle widerspricht (d. H. Klassen, die eine Schnittstelle implementieren, stimmen genau mit allen von der Schnittstelle angegebenen Methodensignaturen überein). Ich werde diese Frage jedoch beobachten, da ich sehr daran interessiert bin zu sehen, ob jemand anderes mir das Gegenteil beweisen wird. – DGH