Maison > Java > javaDidacticiel > Cours anonymes en Java

Cours anonymes en Java

DDD
Libérer: 2025-01-20 22:33:15
original
532 Les gens l'ont consulté

Clases anónimas en Java

Les

classes anonymes en Java sont des classes sans nom, idéales pour définir et instancier des implémentations de classes ou d'interfaces sur place, sans avoir besoin de fichiers supplémentaires. Son caractère à usage unique empêche sa réutilisation. Contrairement aux classes locales (déclarations), les classes anonymes sont des expressions qui génèrent un seul objet, attribuable à une variable.

Ils sont particulièrement utiles lorsqu'une classe n'est utilisée qu'une seule fois, par exemple lors de la définition d'une méthode spécifique d'une interface ou d'une classe abstraite. Son application est fréquente en Java Swing avec des fonctions event listeners ou lambda (fonctions fléchées).

Comme fait curieux, le compilateur Java leur attribue un nom automatique (par exemple ClaseContenedora.class), formé par le nom de la classe contenant et un numéro qui indique sa position.

Syntaxe :

Étant une expression, sa syntaxe ressemble à l'invocation d'un constructeur, mais à la place, elle contient un bloc de code qui définit la structure de la classe :

<code class="language-java">ClaseOInterfaz nombreVariable = new ClaseOInterfaz() {
    // Cuerpo de la clase anónima
};</code>
Copier après la connexion

Les composants clés sont :

  • L'opérateur new.
  • Le nom de la classe à étendre ou l'interface à implémenter.
  • Parenthèses avec les arguments du constructeur (si vous en avez), comme lors de l'instanciation d'une classe normale. Dans les interfaces, les parenthèses sont vides.
  • Clés qui verrouillent le corps de la classe.
  • Il est déclaré et instancié sur une seule ligne, stocké dans une variable.

Types de cours anonymes :

  • Extension d'un cours.
  • Extension d'une classe abstraite.
  • Mise en place d'une interface.
  • Argument d'une méthode.

Exemples :

1. Prolongation d'un cours :

<code class="language-java">public class Carro {
    public void tipoMotor() {
        System.out.println("Motor de combustión interna");
    }
}

public class Main {
    public static void main(String[] args) {
        Carro carroCombustion = new Carro();
        Carro carroElectrico = new Carro() {
            @Override
            public void tipoMotor() {
                System.out.println("Motor eléctrico");
            }
        };
        carroCombustion.tipoMotor(); // Motor de combustión interna
        carroElectrico.tipoMotor(); // Motor eléctrico
    }
}</code>
Copier après la connexion

2. Extension d'une classe abstraite :

<code class="language-java">public abstract class ConexionBD {
    public abstract void obtenerConexion();
}

public class Main {
    public static void main(String[] args) {
        ConexionBD conexionMySQL = new ConexionBD() {
            @Override
            public void obtenerConexion() {
                System.out.println("Conexión a MySQL");
            }
        };
        ConexionBD conexionPostgreSQL = new ConexionBD() {
            @Override
            public void obtenerConexion() {
                System.out.println("Conexión a PostgreSQL");
            }
        };
        conexionMySQL.obtenerConexion(); // Conexión a MySQL
        conexionPostgreSQL.obtenerConexion(); // Conexión a PostgreSQL
    }
}</code>
Copier après la connexion

3. Mise en place d'une interface :

<code class="language-java">import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> numeros = Arrays.asList(5, 10, 56, 3, 2, 1, 0);
        numeros.sort(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        System.out.println(numeros); // [56, 10, 5, 3, 2, 1, 0]
    }
}</code>
Copier après la connexion

4. Argument d'une méthode :

<code class="language-java">public class Main {
    public static void main(String[] args) {
        Thread hilo = new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    System.out.println("Hola, soy un hilo");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        hilo.start();
    }
}</code>
Copier après la connexion

Avantages :

  • Création d'objets uniquement lorsqu'ils sont nécessaires.
  • Modifier le comportement des classes ou des interfaces sans sous-classes.
  • Code plus concis et lisible.
  • Gain de temps en évitant les fichiers supplémentaires.

Portée :

Similaire aux classes normales, avec accès aux variables locales de la portée du conteneur, avec les restrictions de ne pas pouvoir déclarer d'initialiseurs ou d'interfaces statiques, et la limitation de l'accès aux variables locales non finales ou effectivement finales.

Conclusion :

Les classes anonymes sont un outil puissant et polyvalent en Java, utile pour des implémentations uniques et concises. Son utilisation, bien que parfois implicite, simplifie le code et améliore l'efficacité. Pour plus d'informations, consultez la documentation Java officielle.

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!

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