resueltos polimorfismo metodos interfaces instancia implementacion herencia genericos ejercicios clase abstracta java class interface instantiation

polimorfismo - metodos genericos java



¿Por qué se puede crear una instancia de la interfaz Java en estos códigos? (3)

El ejemplo anterior no crea una nueva instancia de interfaz: después de la palabra clave nueva, hay un método de implementación para la interfaz actual. Lea más acerca de la clase anónima.

Posible duplicado:
Crear un "objeto" de una interfaz

Soy nuevo en Java. Según mi entendimiento:

  • No podemos crear una instancia de una Interface . Solo podemos instanciar una class que implementa una interface .
  • La new palabra clave se usa para crear un objeto de una clase.

Sin embargo, cuando leí los códigos fuente de algunos programas Java, encontré que a veces se crea una instancia de la Interfaz. Por ejemplo:

Ejemplo 1:

JButtonObject.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //codes } });

Ejemplo 2:

SwingUtilities.invokeLater(new Runnable() { public void run() { //codes } });

En el ejemplo anterior, ActionListener y Runnable son ambas interfaces Java. ¿Puedo saber por qué se pueden crear instancias en estos códigos?

¿Cuál es el propósito de instanciar una interfaz? Consulte este ejemplo , parece que deberíamos crear una instancia de una clase que implemente la interfaz.


Ese código no instancia una interfaz, sino una clase anónima que implementa ActionListener o Runnable .

Una clase anónima es una clase local sin nombre. Una clase anónima se define y se crea una instancia en una sola expresión sucinta utilizando el nuevo operador.

El código está creando una instancia de ActionListener anónima, lo que significa que la clase en realidad no tiene ningún nombre.

Después de compilar esa clase, puede ver una clase YourClass$1.class en la salida. El $1 simplemente significa que la clase es una clase anónima y el compilador genera el número 1 . Cuando tenga dos clases anónimas, tendrá algo como YourClass$1.class y YourClass$2.class en las clases compiladas.

Ver


Esta forma es solo una abreviatura para facilitar la creación de un objeto que implemente una interfaz. No es la propia interfaz la que se Object implements Runnable una instancia, sino que un Object implements Runnable por ejemplo.