2
respuestas

[Duda] Uso de "instanceof"

¿Si la clase “Titulo” es la clase madre o superclase, como es que la clase madre puede tener un método de una interfaz implementada en la clase hija (Pelicula)?... El uso de "instaceof" no me queda claro en este sentido porque la clase madre ni siquiera implementa la interfaz, si no quien lo hace es la clase hija y se usa el instanceof para ello. item es una variable de tipo Titulo y entiendo la parte del casteo, pero no puedo comprender dentro del if el "instanceof", lo correcto hubiera sido "if (item instanceof Titulo) { }"

for (Titulo item: lista)
        {
            System.out.println(item.getNombre());
            if (item instanceof Pelicula)
            {
                Pelicula pelicula = (Pelicula) item;
                System.out.println(pelicula.getClasificable());
            }
        }
2 respuestas

Buenas compañero!

Una confusión común. Lo que esta pasando acá es que el uso de instanceof es, en este caso, para verificar si el objeto referenciado por item, es una película. Como haz dicho la clase Titulo es la clase padre, esto significa que los objetos de la clase Pelicula siempre heredan de el, pero no funciona al revés, por lo mismo requieres hacer esa comprobación, supongo.

Si solo usáramos if (item instanceof Titulo), se verificaría si item es una instancia de Titulo o de alguna de sus subclases. Pero para este caso especifico quieres saber si item es una Pelicula, al parecer esto para usar métodos pertenecientes a la clase Pelicula.

El código siempre imprimirá el nombre del item ( System.out.println(item.getNombre()); ), pero de ser una película, entonces imprimirá más información ( System.out.println(pelicula.getClasificable()); )

Espero haberte ayudado, si fue así recuerda marcar como solucionado el topic. Suerte en tus actividades.

Nota: además esta comprobación te evitara las ClassCastException.

"Como haz dicho la clase Titulo es la clase padre, esto significa que los objetos de la clase Pelicula siempre heredan de él, pero no funciona al revés, por lo mismo requieres hacer esa comprobación". Tú mismo lo dijiste no funciona al revés y menos si el método que se quiere usar es de una interfaz de la clase hija que implementa el metodo getClasificable. Por eso aun no me queda claro cómo "item instanceof Pelicula" lanza "true" dentro de la condición If, si el casteo que se hace es posterior y no antes.