Classe interne anonyme en Java

Shikha Chaudhary 12 octobre 2023
  1. Classe interne anonyme en Java
  2. Variables et membres de la classe interne anonyme en Java
  3. Création de classes internes anonymes en Java
  4. Différents types de classe interne anonyme en Java
  5. Avantages de la classe interne anonyme en Java
  6. Conclusion
Classe interne anonyme en Java

Cet article parle de la classe Anonymous Inner en Java et de son utilité.

Classe interne anonyme en Java

Le mot anonyme signifie - de nom inconnu. Il en va de même pour la classe interne anonyme Java.

Une classe interne sans nom et pour laquelle nous n’avons besoin de créer qu’un seul objet est connue sous le nom de classe interne anonyme Java. C’est utile lorsque nous devons créer une instance de l’objet lorsque nous devons faire des choses supplémentaires comme surcharger les méthodes d’une classe ou d’une interface.

Nous pouvons le faire en utilisant la classe interne anonyme Java sans créer la sous-classe de la classe.

En d’autres termes, une classe sans nom est appelée classe interne anonyme Java. Habituellement, chaque fois que nous créons une nouvelle classe, elle porte un nom.

Par conséquent, la classe interne anonyme Java n’est pas utilisée pour créer de nouvelles classes. Nous utilisons plutôt pour remplacer les méthodes d’une classe ou d’une interface.

Ils sont également utiles dans la programmation graphique, où nous écrivons des classes d’implémentation pour les interfaces d’écoute.

La syntaxe de la classe interne anonyme Java ressemble à l’appel d’un constructeur, sauf que la définition de classe est également présente à l’intérieur du bloc de code.

Syntaxe:

Demo d = new Demo() {
  public void demo_method() {
    // definition
  }
};

Ici, démo fait référence à une classe abstraite/concrète ou à une interface. Pour mieux comprendre le concept de classe interne anonyme, voyons en quoi il est différent d’une classe Java classique.

  • Nous pouvons implémenter n’importe quel nombre d’interfaces en utilisant une classe normale, mais la classe interne anonyme n’implémente qu’une seule interface à la fois.
  • Une classe régulière peut étendre une autre classe et implémenter simultanément plusieurs interfaces. Alors que d’un autre côté, une classe interne anonyme ne peut faire qu’une seule de ces choses à la fois.
  • Le nom du constructeur est le même que le nom d’une classe. Cela implique que nous pouvons écrire n’importe quel nombre de constructeurs dans une classe régulière, mais ce n’est pas vrai pour une classe interne anonyme.

Pour en savoir plus sur les classes internes en Java, reportez-vous à cette documentation.

Variables et membres de la classe interne anonyme en Java

Les classes internes anonymes capturent également des variables comme n’importe quelle classe locale en Java. L’accès aux variables locales est le même qu’une classe englobante.

Les membres de la classe englobante sont accessibles par la classe anonyme. Cependant, il ne peut pas accéder aux variables locales (pas même celles présentes dans sa portée englobante) qui ne sont pas finales.

De plus, si nous déclarons un type dans une classe anonyme, cela masque les autres déclarations portant le même nom dans cette portée. La classe interne anonyme a également certaines restrictions.

  • La classe interne anonyme n’autorise pas la déclaration d’initialiseurs statiques ou d’interfaces membres.
  • Les membres statiques peuvent faire partie de la classe anonyme s’ils sont des variables constantes.

Il conclut que nous pouvons déclarer un champ, des méthodes supplémentaires, des initialiseurs d’instance et des classes locales à l’intérieur d’une classe anonyme.

Création de classes internes anonymes en Java

Il existe deux façons principales de créer une classe interne anonyme. Ceux-ci incluent l’utilisation de:

  • Un cours (abstrait ou concret)
  • Une interface

Examinons-les un par un.

Utiliser une classe pour créer une classe interne anonyme en Java

Tout d’abord, regardez l’exemple ci-dessous.

abstract class Demo {
  abstract void demo();
}
class AnonymousDemo {
  public static void main(String args[]) {
    Demo d = new Demo() {
      void demo() {
        System.out.println("This is a demo of an anonymous inner class using  class.");
      }
    };
    d.demo();
  }
}

Production :

This is a demo of an anonymous inner class using class.

Ici, une classe est créée dont le nom est décidé par le compilateur. Cette classe étend la classe Demo et implémente la méthode demo().

L’objet d’une classe anonyme est d. C’est la variable de référence de la classe Demo de type anonyme. Notez que nous l’enregistrons sous AnonymousDemo.java pour la compilation.

Le code ci-dessous explique comment le compilateur génère la classe interne.

import java.io.PrintStream;
static class AnonymousDemo$1 extends Demo {
  AnonymousDemo$1() {}
  void demo() {
    System.out.println("This is a demo of an anonymous inner class using class.");
  }
}

Utiliser une interface pour créer une classe interne anonyme en Java

Dans la section ci-dessus, nous utilisons une classe. Mais ici, nous allons utiliser une interface pour la classe interne anonyme. Comprenons cela à l’aide d’un exemple.

interface Demonstration {
  void demo();
}
class AnonymousDemo {
  public static void main(String args[]) {
    Demonstration d = new Demonstration() {
      public void demo() {
        System.out.println("This is an example of an anonymous inner class using an interface.");
      }
    };
    d.demo();
  }
}

Production :

This is an example of an Anonymous inner class using an interface.

Ici, une classe est créée dont le nom est décidé par le compilateur. Cette classe implémente l’interface Demonstration et donne l’implémentation de la méthode demo().

L’objet d’une classe anonyme est d. C’est la variable de référence du type Démonstration. Notez que nous l’enregistrons sous AnonymousDemo.java pour la compilation.

Le code ci-dessous explique comment le compilateur génère la classe interne.

import java.io.PrintStream;
static class AnonymousDemo$1 implements Demonstration {
  AnonymousDemo$1() {}
  void demo() {
    System.out.println("This is an example of an anonymous inner class using an interface.");
  }
}

Différents types de classe interne anonyme en Java

Les classes internes anonymes sont classées en 3 types basés sur la déclaration et le comportement.

  • Classe interne anonyme qui étend une classe.
  • Classe interne anonyme qui implémente une interface.
  • La classe interne anonyme est définie dans l’argument méthode/constructeur.

Discutons de ces trois types un par un.

Classe interne anonyme qui étend une classe en Java

Nous pouvons créer un thread en étendant une classe Thread, et nous pouvons également avoir une classe interne anonyme qui étend une classe.

Nous utilisons ici le mot-clé new pour créer un objet qui référence le type de classe parent. Regardez l’exemple ci-dessous.

class Demo {
  public void example() {
    System.out.println("Types of Anonymous classes");
  }
}
public class AnonymousDemo {
  public static void main(String args[]) {
    Demo d1 = new Demo();
    d1.example();
    Demo d2 = new Demo() {
      @Override
      public void example() {
        System.out.println("Type - 1");
      }
    };
    d2.example();
  }
}

Production :

Types of Anonymous classes
Type - 1

Classe interne anonyme qui implémente une interface en Java

Nous pouvons créer un thread en implémentant l’interface Runnable, et la classe interne anonyme peut également implémenter une interface. Nous utilisons le mot clé new pour créer un objet de classe interne anonyme qui référence un type d’interface.

interface Demo {
  public void demo();
}
public class AnonymousDemo {
  public static void main(String args[]) {
    Demo d = new Demo() {
      @Override
      public void demo() {
        System.out.println("Type - 2");
      }
    };
    d.demo();
    System.out.println(d.getClass().getName());
  }
}

Production :

Type - 2
AnonymousDemo$1

Classe interne anonyme dans un argument de méthode/constructeur en Java

La classe interne anonyme à l’intérieur d’une méthode ou d’un argument de constructeur trouve une utilisation dans les applications GUI (interface utilisateur graphique). Ici, nous utilisons la classe interne anonyme comme argument et la passons aux méthodes ou aux constructeurs.

Voici un exemple.

abstract class Demo {
  public abstract void demo();
}
class Example {
  public void example(Demo d) {
    d.demo();
  }
}
public class AnonymousDemo {
  public static void main(String args[]) {
    Example e = new Example();
    e.example(new Demo() {
      @Override
      public void demo() {
        System.out.println("Type - 3");
      }
    });
  }
}

Production :

Type - 3

Avantages de la classe interne anonyme en Java

La classe interne anonyme se ferme sur les variables locales de la méthode, un avantage supplémentaire par rapport aux classes internes. De plus, ces classes réduisent la verbosité et permettent la réutilisation.

De plus, ces classes aident les développeurs car ils n’ont pas à trouver eux-mêmes un nom pour chaque classe. Nous pouvons déclarer et instancier une classe en utilisant simultanément les classes internes anonymes.

Dans l’ensemble, la classe interne anonyme est l’un des avantages de Java.

Pour en savoir plus sur la classe interne anonyme en Java, reportez-vous à cette documentation.

Conclusion

Dans cet article, nous avons discuté de la classe interne anonyme Java. Nous avons vu la différence entre les classes régulières et les classes internes anonymes.

Nous avons également discuté de l’utilisation et des avantages de la classe interne anonyme Java. De plus, nous avons compris l’implémentation et la syntaxe à travers des codes et des exemples. Nous avons même découvert les différents types de classes internes anonymes Java.

En conclusion, la classe interne anonyme de Java ajoute à la fonctionnalité et à la polyvalence du langage en permettant la réutilisation et en réduisant la verbosité.

Article connexe - Java Class