2 つのインターフェイスがあるとします...
public interface StockBroker{
//Give our client some investment strategies.
public String adviseClient(Client c);
}
public interface Doctor{
//Examine our client and give them some medical advice
public String adviseClient(Client c);
}
そして、両方のインターフェースを実装するクラス....
public class JackOfAllTrades implements StockBroker, Doctor{
public String adviseClient(Client c){
}
}
両方のインターフェースを 1 つのメソッドで実装することは構文的には正しいかもしれませんが、目的の動作が得られない場合があります。たとえば、株式仲買人と医師は、通常、それぞれのクライアントに対して非常に異なるアドバイスを提供します。
インターフェイスを実装するオブジェクトを使用する人は、メソッドが医学的アドバイスを提供することをDoctor
期待しています。adviseClient()
しかし、インターフェイスを実装するオブジェクトを使用している人は、メソッドが投資戦略を提示することをStockBroker
期待しています。adviseClient()
この場合、オブジェクトJackOfAllTrades
は、どのタイプのアドバイスを発行すればよいかわかりません。なぜなら、adviseClient()
メソッドには、呼び出されたときにどのインターフェースを実装する必要があるかを伝えるパラメーターがないからadviseClient()
です。
これは Java の欠点です。インターフェイスをDoctor
設計する人は、他の誰かがStockBroker
同じメソッド シグネチャを使用してインターフェイスを設計することを知る方法がなかった可能性があるためです。
インターフェイスを作成する人にとっては、メソッド名を十分に一意にして、名前の衝突がまれになるようにすることをお勧めします。