Maison >Java >javaDidacticiel >Introduction aux différences entre les classes internes anonymes en Java

Introduction aux différences entre les classes internes anonymes en Java

高洛峰
高洛峰original
2017-03-19 10:54:591615parcourir

Les classes internes anonymes sont également des classes internes sans nom

Parce qu'elles n'ont pas de nom, les classes internes anonymes ne peuvent être utilisées qu'une seule fois. Elles sont généralement utilisées pour simplifier l'écriture de code

Mais utilisez anonyme. classes internes Il y a aussi un prérequis pour une classe : elle doit hériter d'une classe parent ou implémenter une interface

Exemple 1 : Ne pas utiliser de classes internes anonymes pour implémenter des méthodes abstraites

abstract class Person {
    public abstract void eat();
}
 
class Child extends Person {
    public void eat() {
        System.out.println("eat something");
    }
}
 
public class Demo {
    public static void main(String[] args) {
        Person p = new Child();
        p.eat();
    }
}

exécuter Résultat : manger quelque chose

Comme vous pouvez le voir, nous utilisons Child pour hériter de la classe Person, puis implémentons une instance de Child et la convertissons en une référence à la classe Person

Cependant, si ici la classe The Child n'est utilisée qu'une seule fois, ne serait-il pas gênant de l'écrire en tant que classe indépendante ?

À cette époque, des classes internes anonymes ont été introduites

Exemple 2 : implémentation de base de classes internes anonymes

abstract class Person {
    public abstract void eat();
}
 
public class Demo {
    public static void main(String[] args) {
        Person p = new Person() {
            public void eat() {
                System.out.println("eat something");
            }
        };
        p.eat();
    }
}

Résultat d'exécution : manger quelque chose

Comme vous pouvez le constater, nous implémentons directement les méthodes dans la classe abstraite Personne entre accolades

De cette façon, nous pouvons omettre l'écriture d'une classe

De plus, les données internes anonymes les classes Peuvent également être utilisées sur les interfaces

Exemple 3 : Utilisation de classes internes anonymes sur les interfaces

interface Person {
    public void eat();
}
 
public class Demo {
    public static void main(String[] args) {
        Person p = new Person() {
            public void eat() {
                System.out.println("eat something");
            }
        };
        p.eat();
    }
}

Résultats d'exécution : manger quelque chose

Comme le montre l'exemple ci-dessus, tant qu'une classe est abstraite ou une interface, les méthodes de ses sous-classes peuvent être implémentées à l'aide de classes internes anonymes

La situation la plus courante est celle de plusieurs En termes d'implémentation de thread, pour implémenter le multi-threading, vous devez hériter de la classe Thread ou de l'interface Runnable

Exemple 4 : Implémentation de classe interne anonyme de la classe Thread

public class Demo {
    public static void main(String[] args) {
        new Thread() {
            public void run() {
                for (int i = 1; i <= 5; i++) {
                    System.out.print(i + " ");
                }
            }
        }.start();
    }
}

Résultats d'exécution : 1 2 3 4 5

Exemple 5 : Implémentation de classe interne anonyme de l'interface Runnable

public class Demo {
    public static void main(String[] args) {
        Runnable r = new Runnable() {
            public void run() {
                for (int i = 1; i <= 5; i++) {
                    System.out.print(i + " ");
                }
            }
        };
        Thread t = new Thread(r);
        t.start();
    }
}

En fait, cela peut être écrit de manière plus concise

public static void main(String[] args) {
        new Thread(new Runnable() {
            public void run() {
                for (int i = 1; i <= 5; i++) {
                    System.out.print(i + " ");
                }
            }
        }).start();
    }

Résultat de l'exécution : 1 2 3 4 5


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn