Così ho fatto questa domanda prima ma ho avuto un errore nel codice che la maggior parte delle persone ha rilevato, piuttosto che il problema stesso.Java: sostituendo una sottoclasse/sottotipo di un parametro quando si sostituisce un metodo?
In ogni caso, sto provando a sovrascrivere un metodo di interfaccia in una classe. Tuttavia, voglio che il tipo di parametro nel metodo di sovrascrittura sia una sottoclasse del tipo del parametro come definito nel metodo sovrascritto.
L'interfaccia è:
public interface Observer {
public void update(ComponentUpdateEvent updateEvent) throws Exception;
}
Mentre la classe che ridefinisce questo metodo è:
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 è una sottoclasse di ComponentUpdateEvent.
Ora, ho potuto semplicemente avere il metodo update() in ConsoleDrawer prendere un ComponentUpdateEvent come parametro e quindi lanciarlo su un ConsoleUpdateEvent ma sto cercando una soluzione leggermente più elegante se possibile. Qualsiasi aiuto sarebbe apprezzato. Grazie.
Non credo che questo sia possibile in quanto contrario al principio di un'interfaccia (ad esempio, le classi che implementano un'interfaccia corrisponderanno esattamente a tutte le firme di metodo specificate dall'interfaccia). Tuttavia, guarderò questa domanda poiché sono molto interessato a vedere se qualcun altro mi dimostrerà che ho torto. – DGH