Introducción
En este laboratorio, aprenderás cómo verificar si un objeto es una instancia de una clase o interfaz específica en Java utilizando la palabra clave instanceof. Exploraremos su uso básico, probaremos su comportamiento con subclases y entenderemos cómo maneja objetos nulos.
A través de ejemplos prácticos, adquirirás experiencia práctica en el uso de instanceof para realizar comprobaciones de tipo en tiempo de ejecución, un concepto fundamental en la programación orientada a objetos.
Utilizar instanceof para la comprobación de clase
En este paso, exploraremos la palabra clave instanceof en Java. La palabra clave instanceof se utiliza para probar si un objeto es una instancia de una clase en particular o implementa una interfaz en particular. Es una herramienta útil para verificar el tipo de un objeto en tiempo de ejecución.
Vamos a crear un sencillo programa en Java para demostrar cómo funciona instanceof.
Abre el WebIDE y asegúrate de estar en el directorio
~/project. Puedes confirmar esto mirando la línea de comandos del terminal o escribiendopwdy presionando Enter.Crea un nuevo archivo Java llamado
TypeCheck.javaen el directorio~/project. Puedes hacer esto haciendo clic derecho en el Explorador de archivos de la izquierda y seleccionando "Nuevo archivo", luego escribiendoTypeCheck.java.Abre el archivo
TypeCheck.javaen el editor y pega el siguiente código:class Animal { // Base class } class Dog extends Animal { // Subclass of Animal } class Cat extends Animal { // Subclass of Animal } public class TypeCheck { public static void main(String[] args) { Animal myAnimal = new Dog(); // Check if myAnimal is an instance of Dog if (myAnimal instanceof Dog) { System.out.println("myAnimal is an instance of Dog"); } else { System.out.println("myAnimal is not an instance of Dog"); } // Check if myAnimal is an instance of Cat if (myAnimal instanceof Cat) { System.out.println("myAnimal is an instance of Cat"); } else { System.out.println("myAnimal is not an instance of Cat"); } // Check if myAnimal is an instance of Animal if (myAnimal instanceof Animal) { System.out.println("myAnimal is an instance of Animal"); } else { System.out.println("myAnimal is not an instance of Animal"); } } }En este código:
- Definimos una clase base
Animaly dos subclasesDogyCat. - En el método
main, creamos una variableAnimalllamadamyAnimaly le asignamos un objetoDog. Esto es posible porque unDoges un tipo deAnimal. - Luego usamos la palabra clave
instanceofpara verificar simyAnimales una instancia deDog,CatyAnimal.
- Definimos una clase base
Guarda el archivo
TypeCheck.java(Ctrl+S o Cmd+S).Compila el programa Java abriendo el terminal en la parte inferior del WebIDE y ejecutando el siguiente comando:
javac TypeCheck.javaSi no hay errores, este comando creará los archivos
TypeCheck.class,Animal.class,Dog.classyCat.classen el directorio~/project.Ejecuta el programa compilado utilizando el siguiente comando:
java TypeCheckDeberías ver una salida similar a esta:
myAnimal is an instance of Dog myAnimal is not an instance of Cat myAnimal is an instance of AnimalEsta salida confirma que
myAnimal, que contiene un objetoDog, es en realidad una instancia deDogy también una instancia de su superclaseAnimal, pero no una instancia deCat.
Has utilizado con éxito la palabra clave instanceof para verificar el tipo de un objeto en Java. En el siguiente paso, exploraremos cómo se comporta instanceof con subclases.
Probar con subclases
En el paso anterior, vimos que un objeto se considera una instancia de su propia clase y también una instancia de su superclase. Vamos a explorar más cómo funciona instanceof con diferentes tipos de objetos y sus subclases.
Modificaremos nuestro archivo TypeCheck.java existente para probar instanceof con un objeto Cat.
Abre el archivo
TypeCheck.javaen el editor del WebIDE.Encuentra el método
mainy agrega las siguientes líneas de código después de las comprobaciones existentes paramyAnimal:System.out.println("\n--- Testing with a Cat object ---"); Animal anotherAnimal = new Cat(); // Check if anotherAnimal is an instance of Dog if (anotherAnimal instanceof Dog) { System.out.println("anotherAnimal is an instance of Dog"); } else { System.out.println("anotherAnimal is not an instance of Dog"); } // Check if anotherAnimal is an instance of Cat if (anotherAnimal instanceof Cat) { System.out.println("anotherAnimal is an instance of Cat"); } else { System.out.println("anotherAnimal is not an instance of Cat"); } // Check if anotherAnimal is an instance of Animal if (anotherAnimal instanceof Animal) { System.out.println("anotherAnimal is an instance of Animal"); } else { System.out.println("anotherAnimal is not an instance of Animal"); }Tu archivo
TypeCheck.javacompleto ahora debería verse así:class Animal { // Base class } class Dog extends Animal { // Subclass of Animal } class Cat extends Animal { // Subclass of Animal } public class TypeCheck { public static void main(String[] args) { Animal myAnimal = new Dog(); // Check if myAnimal is an instance of Dog if (myAnimal instanceof Dog) { System.out.println("myAnimal is an instance of Dog"); } else { System.out.println("myAnimal is not an instance of Dog"); } // Check if myAnimal is an instance of Cat if (myAnimal instanceof Cat) { System.out.println("myAnimal is an instance of Cat"); } else { System.out.println("myAnimal is not an instance of Cat"); } // Check if myAnimal is an instance of Animal if (myAnimal instanceof Animal) { System.out.println("myAnimal is an instance of Animal"); } else { System.out.println("myAnimal is not an instance of Animal"); } System.out.println("\n--- Testing with a Cat object ---"); Animal anotherAnimal = new Cat(); // Check if anotherAnimal is an instance of Dog if (anotherAnimal instanceof Dog) { System.out.println("anotherAnimal is an instance of Dog"); } else { System.out.println("anotherAnimal is not an instance of Dog"); } // Check if anotherAnimal is an instance of Cat if (anotherAnimal instanceof Cat) { System.out.println("anotherAnimal is an instance of Cat"); } else { System.out.println("anotherAnimal is not an instance of Cat"); } // Check if anotherAnimal is an instance of Animal if (anotherAnimal instanceof Animal) { System.out.println("anotherAnimal is an instance of Animal"); } else { System.out.println("anotherAnimal is not an instance of Animal"); } } }Guarda el archivo
TypeCheck.javamodificado.Compila el programa nuevamente en el terminal:
javac TypeCheck.javaEjecuta el programa compilado:
java TypeCheckAhora deberías ver una salida similar a esta:
myAnimal is an instance of Dog myAnimal is not an instance of Cat myAnimal is an instance of Animal --- Testing with a Cat object --- anotherAnimal is not an instance of Dog anotherAnimal is an instance of Cat anotherAnimal is an instance of AnimalEsta salida muestra que
anotherAnimal, que contiene un objetoCat, es una instancia deCatyAnimal, pero no deDog. Esto refuerza el concepto de queinstanceofcomprueba el tipo real del objeto y su jerarquía de herencia.
Has probado con éxito la palabra clave instanceof con diferentes objetos de subclases. En el siguiente paso, veremos cómo se comporta instanceof con objetos null.
Verificar con objetos nulos
En este último paso, investigaremos cómo se comporta la palabra clave instanceof cuando el objeto que se está probando es null. Comprender esto es importante para evitar posibles errores en tus programas Java.
Volveremos a modificar nuestro archivo TypeCheck.java para incluir una prueba con un objeto null.
Abre el archivo
TypeCheck.javaen el editor del WebIDE.Agrega las siguientes líneas de código al final del método
main, después de las pruebas anteriores:System.out.println("\n--- Testing with a null object ---"); Animal nullAnimal = null; // Check if nullAnimal is an instance of Dog if (nullAnimal instanceof Dog) { System.out.println("nullAnimal is an instance of Dog"); } else { System.out.println("nullAnimal is not an instance of Dog"); } // Check if nullAnimal is an instance of Animal if (nullAnimal instanceof Animal) { System.out.println("nullAnimal is an instance of Animal"); } else { System.out.println("nullAnimal is not an instance of Animal"); }Tu archivo
TypeCheck.javacompleto ahora debería verse así:class Animal { // Base class } class Dog extends Animal { // Subclass of Animal } class Cat extends Animal { // Subclass of Animal } public class TypeCheck { public static void main(String[] args) { Animal myAnimal = new Dog(); // Check if myAnimal is an instance of Dog if (myAnimal instanceof Dog) { System.out.println("myAnimal is an instance of Dog"); } else { System.out.println("myAnimal is not an instance of Dog"); } // Check if myAnimal is an instance of Cat if (myAnimal instanceof Cat) { System.out.println("myAnimal is not an instance of Cat"); } else { System.out.println("myAnimal is not an instance of Cat"); } // Check if myAnimal is an instance of Animal if (myAnimal instanceof Animal) { System.out.println("myAnimal is an instance of Animal"); } else { System.out.println("myAnimal is not an instance of Animal"); } System.out.println("\n--- Testing with a Cat object ---"); Animal anotherAnimal = new Cat(); // Check if anotherAnimal is an instance of Dog if (anotherAnimal instanceof Dog) { System.out.println("anotherAnimal is not an instance of Dog"); } else { System.out.println("anotherAnimal is not an instance of Dog"); } // Check if anotherAnimal is an instance of Cat if (anotherAnimal instanceof Cat) { System.out.println("anotherAnimal is an instance of Cat"); } else { System.out.println("anotherAnimal is an instance of Cat"); } // Check if anotherAnimal is an instance of Animal if (anotherAnimal instanceof Animal) { System.out.println("anotherAnimal is an instance of Animal"); } else { System.out.println("anotherAnimal is an instance of Animal"); } System.out.println("\n--- Testing with a null object ---"); Animal nullAnimal = null; // Check if nullAnimal is an instance of Dog if (nullAnimal instanceof Dog) { System.out.println("nullAnimal is an instance of Dog"); } else { System.out.println("nullAnimal is not an instance of Dog"); } // Check if nullAnimal is an instance of Animal if (nullAnimal instanceof Animal) { System.out.println("nullAnimal is an instance of Animal"); } else { System.out.println("nullAnimal is not an instance of Animal"); } } }Guarda el archivo
TypeCheck.javamodificado.Compila el programa en el terminal:
javac TypeCheck.javaEjecuta el programa compilado:
java TypeCheckDeberías ver una salida similar a esta:
myAnimal is an instance of Dog myAnimal is not an instance of Cat myAnimal is an instance of Animal --- Testing with a Cat object --- anotherAnimal is not an instance of Dog anotherAnimal is an instance of Cat anotherAnimal is an instance of Animal --- Testing with a null object --- nullAnimal is not an instance of Dog nullAnimal is not an instance of AnimalComo se puede ver en la salida, cuando el objeto que se prueba con
instanceofesnull, el resultado siempre esfalse. Este es un punto crucial a recordar cuando se utilizainstanceofpara evitar comportamientos inesperados oNullPointerException.
Has verificado con éxito cómo se comporta la palabra clave instanceof con objetos null. Con esto concluimos nuestra exploración de la palabra clave instanceof.
Resumen
En este laboratorio (lab), aprendimos cómo usar la palabra clave instanceof en Java para verificar si un objeto es una instancia de una clase específica o implementa una interfaz particular. Demostramos su uso creando un programa sencillo con una clase base y subclases, y luego utilizando instanceof para verificar el tipo de un objeto en tiempo de ejecución.
Exploramos además cómo se comporta instanceof con subclases, confirmando que un objeto se considera una instancia de su propia clase, así como de cualquier superclase. Finalmente, examinamos el comportamiento de instanceof cuando se aplica a objetos nulos, comprendiendo que siempre devuelve false en tales casos.



