2011-08-16 6 views
2

OnClickListenerは静的インターフェイスですが、OnClickListenerからインスタンス化しています。OnClickListenerインターフェイスからオブジェクトを作成する

私は混乱していて、私たちはJavaのインターフェイスからオブジェクトを生成できますか?

具体的なクラスを作成してOnClickListenerインターフェイスから継承しないのはなぜですか? enter image description here

enter image description here

+1

スタティックインターフェイスとは何ですか?あなたはインターフェイスからオブジェクトを生成していません。実際にはインターフェイスのインライン実装を作成しています... – DeyyyFF

+0

_具体的なクラスを作成せず、OnClickListenerインターフェイスから継承しますか?_まさにそのことが起こっています。 。 – biziclop

+0

しかし、新しい言葉があります。新しいOnClickListenerが等しいクラスHoobがOnClickListenerを実装していますか?新しい単語はオブジェクトを生成するために使用されていますか? – uzay95

答えて

5

匿名内部クラスとして知られているものであること。 Java Standard EditionのSwingのドキュメントはhereをカバーしていますが、これはAndroid開発の多くの目的で使用されていると思います。これらのイベントを発生させるコンポーネントに対して、さまざまなイベントハンドラインターフェイスをより単純に接続することができます。たとえば、このOnClickListenerで実行されているアクションがどこにも必要でない場合、これを使用する唯一のクラスに制限しました。ソースツリーには別のクラスファイルは必要ありません。その特定のUIコンポーネントで何が起こっているのかが少しはっきりしています。

舞台裏では、コンパイラは実際にOnClickListenerを実装する自動的に生成された名前のクラスを作成しています。スタックトレースで、時にはcom.foo.Class$1という名前のクラスが表示されることがあります。その$1は、あなたのクラス用にコンパイラが生成するものです。

+0

com.foo.Class $ 1のものは+1です。それを知らなかった: – Prine

+0

ええ、私は最終的にそれを読んで終わったのは忘れていますが、Sunのドキュメントからすぐには分かりませんでした。私はそれが実際の言語仕様でより正確に指定されていると推測しています。 –

1

あなたは、インターフェイスをインスタンス化されていません。あなたが次のコードでやっていることは、直接インタフェースの実装を作成し、tv_onClickの変数に格納します。..

private OnClickListener tv_onClick = new OnClickListener() { 
    public void onClick(View arg0) { } 
} 
関連する問題