2011-12-06 5 views
1
public class a implements b,c { 

    public void g() 
    { 

    } 

    public static void main(String[] args){ 

       a object =new a(); //this overrides for both the methods in    
           // the interfaces b and c 
      object.g(); 

    } 

} 
interface b 
{ 
    void g(); 
} 
interface c 
{ 
    void g(); 
} 

ここでは、2つのインターフェイスに異なる実装を提供したいと考えています。どうすればいいのですか。 C#では、オーバーライドされたメソッドがどのインタフェースに対して使用されるかを明示的に指定することができます。java.langで行うことはできません。この問題を簡単な例で指定してください。javaで明示的にインターフェイスメソッドを呼び出せますか?そうでない場合は、回避策がありますか?

私はこれを次のように述べることができます...インターフェイスは1つのTVリモコン(インターフェイスb)と内部のVCDプレーヤーのリモート(インターフェイスc)を想定しているとします。リモート(この場合はg()メソッド)上でクリックされた同じボタンに対して、TVとVCDの異なる実装を提供したいと考えています。 g()をオーバーライドすると、両方のインターフェースに対してオーバーライドされます。どのインターフェースを明示的に言及するか私はテレビとVCDプレーヤーのための異なる実装(g()をオーバーライドすることによって)を提供したい。

E.X。右方向ボタンは、テレビ用のチャンネル変更として動作しますが、同じボタンはVCD

+0

呼び出したい2つの実装でコンパイルする例はありますか? –

+3

ここにあなたの質問に対する素晴らしい答えがあります: http://stackoverflow.com/questions/2801878/implemeting-2-interfaces-in-a-class-with-same-method-which-interface-method- is-o – nosirrahcd

答えて

0

このためスキップボタンとして動作します編集した質問への回答されています

  1. インターフェースは単に「このクラスが実装を語ります方法X。同じメソッドを宣言するインターフェイスがいくつあるかは関係ありません。結果は同じです。「このクラスはメソッドXを実装しています」

  2. あなたのケースでは、問題は概念設計によるものです。ボタンの動作は、テレビやVCDのどちらであっても実際は同じです。押したときにアクションが発生します。これはメソッドの動作でなければなりません。押されたボタンに関連付けられたアクションを見つけて実行します。この場合、テレビとVCDでどのように同じになるのでしょうか?さて、アクションビヘイビアをカプセル化したクラスは異なります。このクラスはいくつかあります。 TVChannelChangeAction、Skip30SecActionなど

+0

私が達成したいのは、明示的なインターフェイスの実装です。回避策を使ってjavaでこれを実現できます。ここに私が望むものへのリンクがあります。このリンクの「明示的なインターフェイス実装」を参照してください。 http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java#Explicit_interface_implementation – Nav

+0

その段落の最後の文章は次のように書かれています。「Javaでは、コードを消去して1つまたは複数のインタフェースをリファクタリングする以外にこの問題を解決する方法はありません名前の衝突。このような状況では、Javaは開発者に、より明確な[懸念の分離](http://en.wikipedia.org/wiki/Separation_of_concerns)を実装する設計に強制します。 –

+0

thats私は回避策があるかどうか尋ねる理由...私は信じているすべての解決策があるので) – Nav

関連する問題