Java apprentissage: 6 Interface instanciation? Non, en fait, il est un moyen raccourci

Frappez le saut à l'original
aujourd'hui quand on regarde le code qui en fait , il est « un exemple de l'interface » code, peur, et le code est le suivant:

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);
    }
}

Mais il faut évidemment comprendre est que les interfaces et les classes abstraites ne sont pas nouvelles, et comment cela peut être, l'Internet Baidu pour longtemps, sur cette question pour expliquer, vraiment bien peu, a finalement trouvé un article explique: en fait, pas vraiment instancié, une nouvelle classe interne anonyme qui implémente l'interface, puis obtenir de nouveaux objets classes internes anonymes puis upcast à l'interface (types primitifs) il met en œuvre
se lit suit comme (en fait, je ne comprenait toujours pas un peu, en arrière pour trouver grand demander à Dieu dessous, le premier souvenir)

Donner à chacun de voir un code commun:

tv1.setOnClickListener (nouveau OnClickListener () {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            
        }
    });

A pris note de OnClickListener, Ctrl + source dans la gauche vu,
interface publique OnClickListener à {
/ **
* Lorsque l'appelé A View a été cliqué.
*
* @Param ÉTAIT V de la vue qui a cliqué.
* /
Void onclick (Voir V);
}

Quand nous apprenons à connaître les bases de Java, l'interface est pas instancié, pourquoi peut OnClickListener haut nouveau, il fallait nous laisser demander, à la fin de l'interface ne peut pas être instancié. La réponse est: NON!
Expliquez que cela est écrit classe interne anonyme. nouvelle OnClickListener () {} n'a pas vraiment instancié, une nouvelle classes internes anonymes pour mettre en œuvre l'interface, l'objet pour obtenir de nouvelles classes internes anonymes re interfaces upCast (primitives) qu'elle met en œuvre. Une telle explication peut ne pas suffire, regardons un morceau de code:

classe MyListener outils OnClickListener {
@Override
onClick public void (Voir v) {
}
}

tv1.setOnClickListener (nouveau MyListener ());

De cette façon, nous ne serions pas à écrire des doutes, car l'interface est pas vu des exemples plus de l'illusion. Nous voyons seulement écrit pas spécifié, il instancie une classe interne anonyme, et cette classe implémente une interface.

Publié 33 articles originaux · louange gagné 5 · vues 20000 +

Je suppose que tu aimes

Origine blog.csdn.net/qq_41623154/article/details/105124736
conseillé
Classement