Clase interna anónima en Java

Shikha Chaudhary 12 octubre 2023
  1. Clase interna anónima en Java
  2. Variables y miembros de la clase interna anónima en Java
  3. Creación de Clases Internas Anónimas en Java
  4. Diferentes tipos de clase interna anónima en Java
  5. Ventajas de la clase interna anónima en Java
  6. Conclusión
Clase interna anónima en Java

Este artículo habla sobre la clase Anonymous Inner en Java y su utilidad.

Clase interna anónima en Java

La palabra anónimo significa - de nombre desconocido. Lo mismo es cierto para la clase interna anónima de Java.

Una clase interna sin nombre y para la que solo necesitamos crear un único objeto se conoce como clase interna anónima de Java. Es útil cuando tenemos que crear una instancia del objeto cuando tenemos que hacer algunas cosas adicionales como sobrecargar métodos de una clase o una interfaz.

Podemos hacer esto usando la clase interna anónima de Java sin crear la subclase de la clase.

En otras palabras, una clase sin nombre se denomina clase interna anónima de Java. Por lo general, cada vez que creamos una nueva clase, esta tiene un nombre.

Por lo tanto, la clase interna anónima de Java no se utiliza para crear nuevas clases. Más bien, lo usamos para anular métodos de una clase o interfaz.

También son útiles en la programación de gráficos, donde escribimos clases de implementación para interfaces de escucha.

La sintaxis de la clase interna anónima de Java se asemeja a la llamada de un constructor, excepto que la definición de la clase también está presente dentro del bloque de código.

Sintaxis:

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

Aquí, demo se refiere a una clase abstracta/concreta o una interfaz. Para comprender mejor el concepto de una clase interna anónima, veamos en qué se diferencia de una clase Java normal.

  • Podemos implementar cualquier cantidad de interfaces usando una clase normal, pero la clase interna anónima implementa solo una interfaz a la vez.
  • Una clase regular puede extender otra clase e implementar simultáneamente varias interfaces. Mientras que, por otro lado, una clase interna anónima solo puede hacer una de estas cosas a la vez.
  • El nombre del constructor es el mismo que el nombre de una clase. Implica que podemos escribir cualquier número de constructores en una clase regular, pero esto no es cierto para una clase interna anónima.

Para saber más sobre las clases internas en Java, consulte esta documentación.

Variables y miembros de la clase interna anónima en Java

Las clases internas anónimas también capturan variables como cualquier clase local en Java. El acceso a las variables locales es el mismo que el de una clase envolvente.

La clase anónima puede acceder a los miembros de la clase envolvente. Sin embargo, no puede acceder a aquellas variables locales (ni siquiera las presentes en su ámbito envolvente) que no sean definitivas.

Además, si declaramos cualquier tipo en una clase anónima, oculta otras declaraciones que tienen el mismo nombre en ese ámbito. La clase interna anónima también tiene algunas restricciones.

  • La clase interna anónima no permite la declaración de inicializadores estáticos o interfaces de miembros.
  • Los miembros estáticos pueden ser parte de la clase anónima si son variables constantes.

Concluye que podemos declarar un campo, métodos adicionales, inicializadores de instancias y clases locales dentro de una clase anónima.

Creación de Clases Internas Anónimas en Java

Hay dos formas principales que podemos usar para crear una clase interna anónima. Estos incluyen el uso de:

  • Una clase (abstracta o concreta)
  • Una interfaz

Veámoslos uno por uno.

Use una clase para crear una clase interna anónima en Java

Primero, mira el ejemplo de abajo.

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();
  }
}

Producción :

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

Aquí se crea una clase cuyo nombre lo decide el compilador. Esta clase extiende la clase Demo e implementa el método demo().

El objeto de una clase anónima es d. Es la variable de referencia de la clase Demo de tipo anónimo. Tenga en cuenta que guardamos esto como AnonymousDemo.java para su compilación.

El siguiente código es cómo el compilador genera la clase interna.

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.");
  }
}

Use una interfaz para crear una clase interna anónima en Java

En la sección anterior, usamos una clase. Pero aquí usaremos una interfaz para la clase interna anónima. Entendamos esto usando un ejemplo.

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();
  }
}

Producción :

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

Aquí se crea una clase cuyo nombre lo decide el compilador. Esta clase implementa la demostración de la interfaz y proporciona la implementación del método demo().

El objeto de una clase anónima es d. Es la variable de referencia del tipo Demostración. Tenga en cuenta que guardamos esto como AnonymousDemo.java para su compilación.

El siguiente código es cómo el compilador genera la clase interna.

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.");
  }
}

Diferentes tipos de clase interna anónima en Java

Las clases internas anónimas se clasifican en 3 tipos según la declaración y el comportamiento.

  • Clase interna anónima que amplía una clase.
  • Clase interna anónima que implementa una interfaz.
  • La clase interna anónima se define dentro del argumento del método/constructor.

Analicemos estos tres tipos uno por uno.

Clase interna anónima que amplía una clase en Java

Podemos crear un hilo extendiendo una clase Thread, y también podemos tener una clase interna anónima que extienda una clase.

Usamos la palabra clave new aquí para crear un objeto que hace referencia al tipo de clase principal. Mira el ejemplo de abajo.

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();
  }
}

Producción :

Types of Anonymous classes
Type - 1

Clase interna anónima que implementa una interfaz en Java

Podemos crear un hilo implementando la interfaz Runnable, y la clase interna anónima también puede implementar una interfaz. Usamos la palabra clave new para crear un objeto de clase interna anónimo que hace referencia a un tipo de interfaz.

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());
  }
}

Producción :

Type - 2
AnonymousDemo$1

Clase interna anónima dentro de un argumento de método/constructor en Java

La clase interna anónima dentro de un argumento de método o constructor encuentra uso en aplicaciones GUI (Graphical User Interface). Aquí, usamos la clase interna anónima como argumento y la pasamos a métodos o constructores.

Aquí hay un ejemplo.

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");
      }
    });
  }
}

Producción :

Type - 3

Ventajas de la clase interna anónima en Java

La clase interna anónima se cierra sobre las variables locales del método, una ventaja adicional sobre las clases internas. Además, estas clases reducen la verbosidad y proporcionan reutilización.

Además, estas clases ayudan a los desarrolladores, ya que no tienen que encontrar un nombre para cada clase por su cuenta. Podemos declarar e instanciar una clase usando las clases internas anónimas simultáneamente.

En general, la clase interna anónima es una de las ventajas de Java.

Para obtener más información sobre la clase interna anónima en Java, consulte esta documentación.

Conclusión

En este artículo, discutimos la clase interna anónima de Java. Vimos la diferencia entre las clases regulares y las clases internas anónimas.

También discutimos el uso y las ventajas de la clase interna anónima de Java. Además, entendimos la implementación y la sintaxis a través de códigos y ejemplos. Incluso aprendimos sobre los diversos tipos de clases internas anónimas de Java.

En conclusión, la clase interna anónima en Java se suma a la funcionalidad y versatilidad del lenguaje al proporcionar reutilización y reducir la palabrería.

Artículo relacionado - Java Class