2011-11-01 17 views
8

Esta es probablemente una pregunta muy fácil. Hola, soy estudiante y relativamente nuevo en Java y actualmente estoy estudiando para un examen de mitad de período que tengo mañana. Una de las preguntas de la práctica estoy atascado en es lo que sucede cuando se tiene algo como:Usando .getclass() en una interfaz

System.out.println(interface1.getClass().getName());

interface1 ha sido declarado como interface1 = class1. Estoy bastante seguro de que imprimiría "class1" y no "interface1" porque interface1 no es una clase, ¿verdad? pero no estoy seguro ya que la pregunta también dice que si produce un error de tiempo de compilación, dígalo. Nuestro profesor es conocido por engañarnos y más de una vez que recibí una prueba y todavía estaba confundido sobre por qué me equivoqué con un problema.

+3

¿Qué hay de probar que usted mismo al escribir este programa y ejecutarlo? –

+0

¿Hay más código para ir con eso? No sabemos qué es 'clase '. – AusCBloke

+0

Lo habría hecho y lo he hecho para muchos de los programas en la práctica a mitad de período, pero este no era un programa sino solo una pregunta. Además, me gustaría haber aprendido un poco sobre las interfaces que el caballero debajo de mí hizo exactamente eso. – Erik

Respuesta

10

No es porque sea una interfaz que obtendría class1, sino porque getClass() se resolverá en la clase de tiempo de ejecución de la instancia. Dado que lo ha creado como class1, ese es el tipo de tiempo de ejecución. No le dará un error en tiempo de compilación.

Obtención de un objeto Class para una interfaz es posible a través de la reflexión.

alternativa, se puede acceder a la clase más directamente a través de la palabra clave class:

String className = Runnable.class.getName(); 
+0

Entonces, básicamente, si tengo una interfaz, ¿usar el método getClass() siempre devolverá la clase de lo que he definido la interfaz para que sea una instancia de? – Erik

+0

@Erik Eso es correcto. Porque getClass() se resuelve con la implementación de la clase de la instancia. Se resuelve dinámicamente, no algo determinado estáticamente en tiempo de compilación. Gracias por la edición, user268396, que es de hecho más directa. Lo siento si dejo de tener sentido, estoy un poco cansado. –

+0

Muchas gracias, ojalá me llegue una A mañana: P – Erik

Cuestiones relacionadas