Soy Java autodidacta y estoy un poco confundido sobre el uso de "instancia de" en Java. Básicamente sé usar instancia de, sin embargo, estoy teniendo dificultades con este caso. Escribo una interfaz, luego uso una clase para implementar esa interfaz. A continuación, quiero verificar si la interfaz tiene una instancia de con la clase de implementación. Lo intenté, pero el valor de retorno es solo "falso", pero quiero que devuelva "verdadero", ¿cómo debo escribirlo? ¿Puedo lograr ese objetivo? ¿Hay algún código de muestra o sugerencias para mí? te lo agradeceria mucho y te lo agradeceria. Lo siento, soy un novato, gracias.
interface Demo { } class A implement Demo { } public class Main { public static void main(String[] args){ Demo demo = new Demo() {}; boolean result = demo instanceof A ; // I want result is "true"; System.out.println(result); } }No puede crear un objeto de interfaz porque la interfaz es básicamente una clase abstracta completa. Eso significa que la interfaz solo tiene la desaceleración del método, no su implementación. Entonces, si no tenemos ninguna implementación de un método, eso significa que si creamos un objeto de esa interfaz y llamamos a ese método, no compilará nada ya que no hay código para compilar.
interface Demo { } class A implements Demo { } public class Main { public static void main(String[] args){ Demo demo = new A(); boolean result = demo instanceof A ; System.out.println(result); } }A implement Demo y así: object with type A instanceof Demo será true , pero no al revés.
Idealmente, Demo no sabe nada acerca de A .
Y no debe crear una instancia de interfaz.
El código que diste funciona perfectamente bien. result es falso, porque demo no es una instancia de A . De hecho, es al revés. Debido a que A implementa Demo , todas las instancias de A devolverían verdadero cuando se verifica que sean Demo .
Puede definir demo para que sea una instancia de A y luego verificar si es una instancia de Demo :
Demo demo = new A(); boolean result = demo instanceof Demo; // now it is true System.out.println(result); Editar: Cambió la declaración de demo debido al comentario de @Thomas (¡Gracias!)