Maison > Java > javaDidacticiel > le corps du texte

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

高洛峰
Libérer: 2017-03-19 10:54:59
original
1571 Les gens l'ont consulté

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();
    }
}
Copier après la connexion

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();
    }
}
Copier après la connexion

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();
    }
}
Copier après la connexion

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();
    }
}
Copier après la connexion

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();
    }
}
Copier après la connexion

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();
    }
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal