interface Int {
public void show();
}
public class Test {
public static void main(String[] args) {
Int t1 = new Int() {
public void show() {
System.out.println("message");
}
};
t1.show();
}
}
Respuesta
Está definiendo una clase anónima que implementa la interfaz Int
, e inmediatamente crea un objeto del tipo thatAnonymousClassYouJustMade
.
Lo que hace esta sintaxis especial para las clases internas anónimas bajo el capó es crear una clase llamada Test$1
. Puede encontrar ese archivo de clase en la carpeta de su clase junto a la clase Prueba, y si imprimió t1.getClass().getName()
también podría ver eso.
Esta notación es la abreviatura de
Int t1 = new MyIntClass();
// Plus this class declaration added to class Test
private static class MyIntClass implements Int
public void show() {
System.out.println("message");
}
}
Así que al final va a crear una instancia de una clase concreta, cuyo comportamiento ha definido en línea.
Puede hacer esto también con clases abstractas, proporcionando implementaciones para todos los métodos abstractos en línea.
Creo que su objeto no tiene nada que ver con la interfaz. Si comenta la interfaz completa, igual obtendrá el mismo resultado. Es solo una clase anónima creada. Creo que, a menos que uses la clase "implementa", no puedes implementar la interfaz. Pero no sé cómo la colisión de nombres no ocurre en tu caso.
La clase anónima definitivamente implementa la interfaz, y 't1 instanceof Int' será verdadera. – Thilo
- 1. ¿Podemos crear un objeto de una interfaz?
- 2. Crear objetos desde una interfaz en C#
- 3. Objeto como interfaz
- 4. Crear objeto falso por interfaz
- 5. Crear objeto fstream desde un archivo * puntero
- 6. Devolver una interfaz desde un servicio WCF
- 7. casting un objeto a una interfaz genérica
- 8. Prueba si un objeto implementa una interfaz
- 9. crear flujo de salida de objeto desde un objeto
- 10. crear objeto de clase abstracta e interfaz
- 11. Cómo crear un nodo DOM como un objeto?
- 12. Pasando "esto" a una función desde dentro de un constructor?
- 13. Google Maps infowindow.setContent como un elemento DOM con jQuery parece que solo funciona una vez?
- 14. Crear una guía desde un int
- 15. Crear una imagen desde un DIV
- 16. unión dinámica parece como una mentira
- 17. Crear un rubí Proc desde una cadena
- 18. Crear objeto COM desde archivo sin regsvr32
- 19. Cómo echar una interfaz a un objeto en Delphi
- 20. Pasar un método de extensión a un método que espera un delegado. ¿Como funciona esto?
- 21. Google Calendar como interfaz
- 22. Usando Ninject, ¿puedo crear una instancia desde una interfaz sin exponer mi clase concreta?
- 23. ¿Mover desde * esto en un método rvalue?
- 24. ¿Cómo puedo crear un lenguaje como PHP y cómo funciona?
- 25. ¿Cómo puedo crear una interfaz para matplotlib?
- 26. módulo para crear una representación de objeto python desde xml
- 27. Primavera como una fábrica glorificada; es esto aceptable?
- 28. Crear un cursor semitransparente desde una imagen
- 29. Gradle jettyRun: ¿cómo funciona esto?
- 30. ¿Por qué funciona esto?
Esto es realmente útil para controladores de eventos (como los que usan la interfaz ActionListener). –