私は以前この質問をしましたが、問題自体ではなく、ほとんどの人が拾ったコードに間違いがありました。Java:メソッドをオーバーライドするときにパラメータのサブクラス/サブタイプに置き換えますか?
とにかく、クラスのインターフェイスメソッドをオーバーライドしようとしています。ただし、オーバーライドされたメソッドのパラメータの型を、オーバーライドされたメソッドで定義されているパラメータの型のサブクラスにしたいとします。
インタフェースである:
public interface Observer {
public void update(ComponentUpdateEvent updateEvent) throws Exception;
}
このメソッドをオーバーライドするクラスがあるが:
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はComponentUpdateEventのサブクラスです。
これで、ConsoleDrawerのupdate()メソッドをComponentUpdateEventをパラメータとして取得し、それをConsoleUpdateEventにキャストすることができましたが、可能であれば、より洗練されたソリューションを探しています。 Anyhelpに感謝します。ありがとうございました。
これは、インターフェースの原則(つまり、インターフェースを実装するクラスは、インターフェースによって指定されたすべてのメソッドのシグネチャーと正確に一致します)とは反対に、これは可能ではないと思います。しかし、他の人が私を間違っているかどうかを知ることに非常に興味があるので、私はこの質問を見るでしょう。 – DGH