J'ai donc posé cette question auparavant, mais j'ai eu une erreur dans le code que la plupart des gens ont choisi, plutôt que le problème lui-même.Java: substitution d'une sous-classe/sous-type d'un paramètre lors de la substitution d'une méthode?
Quoi qu'il en soit, j'essaie de remplacer une méthode d'interface dans une classe. Cependant, je souhaite que le type du paramètre dans la méthode de substitution soit une sous-classe du type du paramètre tel que défini dans la méthode overrid.
L'interface est:
public interface Observer {
public void update(ComponentUpdateEvent updateEvent) throws Exception;
}
Alors que la classe qui remplace cette méthode est:
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 est une sous-classe de ComponentUpdateEvent.
Maintenant, je pourrais juste avoir la méthode update() dans ConsoleDrawer prendre un ComponentUpdateEvent en tant que paramètre, puis le transformer en ConsoleUpdateEvent mais je cherche une solution un peu plus élégante si possible. Toute aide serait appréciée. Je vous remercie.
Je ne crois pas que cela soit possible car cela va à l'encontre du principe d'une interface (c'est-à-dire que les classes qui implémentent une interface correspondent exactement à toutes les signatures de méthodes spécifiées par l'interface). Cependant, je vais regarder cette question car je suis très intéressé de voir si quelqu'un d'autre va me prouver le contraire. – DGH