2011-08-12 15 views
4

が、私はこのインタフェースとクラスを考えてみましょうしないでくださいインターフェイスのメソッド実装しますは何も

interface IListener 
{ 
    void f(); 
    void g(); 
    void h(); 
} 

class Adapter implements IListener 
{ 
    void f() {} 
    void g() {} 
    void h() {} 
} 

を、彼らは何もしない場合thooseインタフェースメソッドを実装するためのポイントは何ですか?

質問はDesign Patterns Java Workbookから取得しました。

答えて

9

すべてのメソッドが必要ない場合は、インターフェイスの実装を簡単にすることを目的としています。アダプターを拡張して、必要なメソッドだけをオーバーライドすることができます。これらのクラスは便宜上存在します。

たとえば、Swingでは、MouseListenerを実装すると、すべてのマウスイベントを処理したくない場合があります。この場合、MouseAdapterを拡張して、関心のあるイベントだけを扱うことができます。

通常、Adapterクラスも同様にインターフェイスを実装しています。

+0

オハイオ州、申し訳ありませんが、誤植でした。返信いただきありがとうございます。修正する – Kobe

+0

インターフェイスをパブリックにする場合は、直接インターフェイスを実装する必要があります。少なくとも彼らの一部がそれをするでしょう。インプリメンテーションを破らない*ではないことを確認したい場合は、インタフェースを作成しないでください。空のメソッドのみ。 –

+0

アダプタクラスは通常同様にインターフェイスを実装しています.....必ずしもそうでない場合もあります。 –

2

投稿した例では役に立ちませんが、アダプタを作成してIListener(class Adapter implements IListener)を実装すると、new Adapter()のようにアダプタオブジェクトをインスタンス化するよりも少し便利になります。

それ以外の場合は、インタフェースに定義されているすべてのメソッドが適切な実装になるまで、アダプタはインスタンス化されない抽象クラスでも子プロセスでも使用できません。空の実装も適切な実装です。

+0

私は中核を作りました、それはタイプミスでした。ごめんなさい。 – Kobe

+1

あなたはこれを早期に修正しました。あなたは2 :-)に謝罪しなければなりません。 –

関連する問題