Maison >Java >javaDidacticiel >Introduction aux différences entre les classes internes anonymes en Java
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!