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 unaclass
que implementa unainterface
. - 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.