¿Podemos crear un objeto de una interfaz?

interface TestA { String toString(); } public class Test { public static void main(String[] args) { System.out.println(new TestA() { public String toString() { return "test"; } }); } } 

Cual es el resultado?

Una prueba
B. nulo
C. Se arroja una excepción en el tiempo de ejecución.
D. La comstackción falla debido a un error en la línea 1.
E. La comstackción falla debido a un error en la línea 4.
F. La comstackción falla debido a un error en la línea 5.

¿Cuál es la respuesta a esta pregunta y por qué? Tengo una consulta más con respecto a esta pregunta. En la línea 4 estamos creando un objeto de A. ¿Es posible crear un objeto de una interfaz?

Lo que estás viendo aquí es una clase interna anónima :

Dada la siguiente interfaz:

 interface Inter { public String getString(); } 

Puede crear algo así como una instancia de ella así:

 Inter instance = new Inter() { @Override public String getString() { return "HI"; } }; 

Ahora, tienes una instancia de la interfaz que definiste. Sin embargo, debe tener en cuenta que lo que realmente ha hecho se define como una clase que implementa la interfaz y crea una instancia de la clase al mismo tiempo.

test debe ser la salida. Este es un ejemplo de una clase interna anónima.

Este es un patrón muy común utilizado con la interfaz del Comparator como una emulación de cierres.

El truco no es exactamente sobre la clase interna anónima, esta prueba de impresiones causa que anula el método toString y mientras System.out.println a Object llama implícitamente su método toString.

Prueba esto también … ¡Se genera el nombre de la clase anónima!

 Inter instance = new Inter() { public String getString(){ return "HI"+this.getClass(); } }; 

No sé el significado de esta pregunta. Si esta es una pregunta de entrevista, entonces puedo decir que está bien. Pero en tiempo real no es el enfoque correcto para implementar una herencia. En respuesta a la pregunta, aquí lo que estás haciendo es una clase interna anónima .

Aquí está instanciando una clase e implementando la herencia escribiendo,

 System.out.println(new TestA() { public String toString() { return “test”; } }); 

y, por supuesto, el resultado sería la test

Intereting Posts