インタフェースinterface探索-View.OnClickListerを例に


C++と比較して、Javaにはクラスのマルチ継承をサポートしないという大きな変更があります.ただし、Javaはインタフェース(interface)を提供し、1つのクラスで複数のインタフェースを実現することができます.
ゲーム設定に似ています.クラスを継承するのは、ヒーローを選択することです.ヒーロー自体にはいくつかの設定とスキルがあります.インタフェースを実現することは、英雄に異なる装備を装着し、英雄をより豊かにし、勇敢に戦うことだ.
アンドロイドの開発では、Activityでボタンを傍受するクリックイベントがよく発生します.
public class TestActivity extends Activity implements OnClickListener{
    ……
}
のOnClickListenerは
Android.view.View.OnClickListener,Googleの解釈:
Interface definition for a callback to be invoked when a view is clicked.
この本官定義のインタフェースで、Viewクラスがクリックされるとトリガーされます.次に、Viewクラスでどのように定義されているかを見てみましょう.
    /**
     * Interface definition for a callback to be invoked when a view is clicked.
     */
    public interface OnClickListener {
        /**
         * Called when a view has been clicked.
         *
         * @param v The view that was clicked.
         */
        void onClick(View v);
    }
関数宣言以外に何もないことがわかりました.
実はこれもインタフェースの特徴で、1つの関数を宣言して、この関数をインタフェースを実現するクラスに渡して実現します.
次に、ViewクラスでonClick(View v)が呼び出されていることを発見しました.
    public boolean performClick() {
        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);//             

        ListenerInfo li = mListenerInfo;
        if (li != null && li.mOnClickListener != null) {
            playSoundEffect(SoundEffectConstants.CLICK);//      
            li.mOnClickListener.onClick(this);//  onClick,this    view
            return true;
        }

        return false;
    }
ListenerInfoはViewで定義されたクラスで、メンバー変数はmOnClickListenerやmOnLongClickListenerなど、さまざまなリスニングインタフェースです.
performClick()は,コールバックインタフェースだけでなく,再生音効果,クリック効果の表示などの操作も行っている.一方、onClick()を呼び出したcallOnClick()はコールバック関数のみを実行します.
ViewはデフォルトでperformClick()を実行します.
performClick()は、Viewクラスで複数回呼び出されます.
一度はスクリーンイベントインタフェースを実現する関数である.
1回はキーボードイベントインタフェースを実現する関数である.
もう1回はp e r f o m e c e s i b i t y ActionInternal(int action,Bundle arguments)で、この関数はViewにおけるAccessibilityDelegateクラスの1つの関数であり、主にViewの様々な機能と応答のAccessibility近接性を処理するために使用される.
OnClickListenerに戻り、Activityでこのインタフェースを実装する必要があります.
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.btn_test:
			Toast.makeText(MainActivity.this, "    ", Toast.LENGTH_LONG).show();
			break;

		default:
			break;
		}
	}
同時に忘れないでください.
        btn_test.setOnClickListener(this);

このコードはとても重要で、それは相対的にbtn_testは登録され、クリック傍受インタフェースが登録されていますが、このインタフェースはどのように実現されていますか?thisは現在のActivityを指し、その年にActivityが実現したインタフェース関数に従って操作することを意味します.
Activityでインタフェース(implements OnClickListener)を実装する必要のない別の実装方法もある.
    	btn_test = (Button)findViewById(R.id.btn_test);
    	btn_test.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Toast.makeText(MainActivity.this, "  ", Toast.LENGTH_LONG).show();
			}
		});

2つの方法は効果が似ていて、任君が選択します.