元へジャンプヒット
実際にコード「インターフェースの例」があることを、コードを見たときに今日、怖い、と次のようにコードは次のとおりです。
public class testCollections {
public static void main(String[] args) {
ArrayList<Integer> list1 = new ArrayList<>();
list1.add(2);
list1.add(6);
list1.add(3);
list1.add(5);
list1.add(1);
//Collections.sort(list1);
Collections.sort(list1,new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;
}
});
System.out.println(list1);
}
}
しかし、我々は明らかに理解する必要があり、本当に良い少しを説明するために、この問題に、長い時間のために、インタフェースと抽象クラスは新しいものではないこと、そしてこれがいかにあるインターネットBaiduの、最終的には記事が説明した:実際には、そうでもありませんインスタンス化し、実装インタフェース、およびそれが実装インタフェース(プリミティブ型)にアップキャストして新しいオブジェクトに匿名内部クラスを取得していることを新たに匿名内部クラスは
次のように読み取ります(実際には、私はまだ神頼む大きな見つけるために戻って、少し理解していませんでしたその下に、)最初に覚えています
共通のコードを見て皆を与えます。
tv1.setOnClickListener(新しいOnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
見て左に留意OnClickListenerは、Ctrl +ソース
へのパブリックインターフェースOnClickListener {
/ **
*呼び出さAの表示がクリックされた場合。
*
* @ParamをクリックビューのVした。
* /
ボイドのonClick(ビューV);
}
我々は、Javaの基本を知ることを学ぶときに、インターフェイスがインスタンス化されていない理由は、新たなOnClickListenerトップことができ、それは私たちが最後にインターフェースをインスタンス化することができない、聞いてみましょうする必要がありました。答えは:NO!
これは匿名の内部クラスを書かれていることを説明します。新しいOnClickListenerは、(){}本当に、インタフェースを実装する新しい匿名の内部クラスをインスタンス化していない、新しい匿名の内部クラスを取得するオブジェクトは、それが実装されていることをアップキャストインターフェイス(プリミティブ)を再。このような説明が十分ではないかもしれない、私たちはコードの一部を見てみましょう:
クラスMyListener実装OnClickListener {
@Override
ます。public void onClickの(ビューV){
}
}
tv1.setOnClickListener(新しいMyListener());
インターフェースはもはや幻想の例を見ているので、このように我々は、すべての疑問を書く必要はありませんでしょう。我々は唯一の省略書か見る、それは匿名の内部クラスをインスタンス化し、このクラスはインタフェースを実装しています。