English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En este tutorial, aprenderá a entender el operador instanceof de Java con la ayuda de ejemplos.
En Java, la palabra clave instanceof es un operador binario. Se utiliza para verificar si un objeto es una instancia de una clase específica.
El operador también verifica si el objeto es una instancia de una clase que implementa una interfaz (se discutirá más adelante en este tutorial).
La sintaxis de instanceof es:
result = objectName instanceof className;
El operando izquierdo del operador instanceof es el nombre del objeto, y el operando derecho es el nombre de la clase. Si el objeto es una instancia de la clase, el resultado es true; de lo contrario, es false.
class Main { public static void main (String[] args) { String name = "w3codebox"; Integer age = 22; System.out.println("¿Es una instancia de String: "}+ (name instanceof String)); System.out.println("¿Es una instancia de Integer?: ");+ (age instanceof Integer)); } }
Salida:
¿Es una instancia de String?: true ¿Es una instancia de Integer?: true
En el ejemplo anterior, creamos un objeto de tipo String llamado name y otro objeto de tipo Integer llamado age. Luego, usamos el operador instanceof para verificar si el nombre es de tipo String y si el age es de tipo Integer.
En el caso de la herencia, el operador instanceof se utiliza para verificar si el objeto de la subclase también es una instancia de la superclase.
class Animal { } //La clase Dog es una subclase de Animal class Dog extends Animal { } class Main { public static void main(String[] args){ Dog d1 = new Dog(); //Verificar d1¿Es un objeto de la clase Dog? System.out.println("d1¿Es una instancia de Dog?: "+ (d1 instanceof Dog)); //Verificar d1¿Es un objeto de la clase Animal? System.out.println("d1¿Es una instancia de Animal?: "+ (d1 instanceof Animal)); } }
Salida:
d1¿Es una instancia de Dog?: true d1¿Es una instancia de Animal?: true
En el ejemplo anterior, d1son instancias de las clases Dog y Animal. Por lo tanto, d1 instanceof Dog y d1 instanceof Animal todos son true.
En Java, todas las clases heredan de la clase Object, la herencia de la clase Object no utiliza la palabra clave extends. Esta herencia ocurre implícitamente en Java.
class Animal { } class Dog { } class Cat { } class Main { public static void main(String[] args) { Dog d1 = new Dog(); Animal a1 = new Animal(); Cat c1 = new Cat(); System.out.println("d1¿Es una instancia de la clase Object?: "+ (d1 instanceof Object)); System.out.println("a1¿Es una instancia de la clase Object?: "+ (a1 instanceof Object)); System.out.println("c1¿Es una instancia de la clase Object?: "+ (c1 instanceof Object)); } }
Salida:
d1¿Es una instancia de la clase Object?: true a1¿Es una instancia de la clase Object?: true c1¿Es una instancia de la clase Object?: true
En el ejemplo anterior, hemos creado los objetos a de las clases Animal, Dog y Cat.1、d1y c1Hemos utilizado el operador instanceof para verificar estos objetos a1, d1, c1¿También es un objeto de la clase Object?. Los resultados de salida todos son true (verdadero).
Porque la clase Object es la clase raíz definida en el paquete java.lang. Todas las otras clases son subclases de la clase Object que forma la jerarquía en Java.
En Java, el objeto de la subclase se puede considerar como un objeto de la clase padre. Esto se llama conversión de tipo hacia arriba.En términos coloquiales, es decir, convertir un objeto de la subclase en un objeto de la clase padre. Aquí, el objeto de la clase padre puede ser una interfaz.
El compilador de Java realiza automáticamente la conversión de tipo hacia arriba.
class Animal { public void displayInfo() { System.out.println("Soy un animal."); } } class Dog extends Animal { } class Main { public static void main(String[] args) { Dog d1 = new Dog(); Animal a1 = d1; a1.displayInfo(); } }
Salida:
Soy un animal.
En el ejemplo anterior, creamos un objeto de la clase Dog, d1. Usamos d1Para crear un objeto de la clase Animal, a1. Esto se llama conversión de tipo hacia arriba en Java.
Este código se ejecuta sin problemas. Esto se debe a que la conversión de tipo hacia arriba se realiza automáticamente por el compilador de Java.
La conversión de tipo hacia abajo es el proceso opuesto a la conversión de tipo hacia arriba, es decir, lo contrario a la conversión de tipo hacia arriba, es decir, convertir un objeto de la clase padre en un objeto de la subclase.
En el caso de la conversión de tipo hacia abajo, el objeto de la clase padre se considera un objeto de la subclase. Debemos indicar explícitamente al compilador de Java que se realice la conversión de tipo hacia abajo.
class Animal { } class Dog extends Animal { public void displayInfo() { System.out.println("Soy un perro."); } } class Main { public static void main(String[] args) { Animal a1 = new Animal(); Dog d1 = (Dog)a1; // Conversión de tipo hacia abajo d1.displayInfo(); } }
Al ejecutar el programa, se obtendrá una excepción de tipo ClassCastException. Veamos lo que sucede aquí.
Aquí, creamos un objeto de la clase padre Animal, a1. Luego intentamos convertir a1El objeto se fuerza a convertir en un objeto de la subclase Dog, d1.
Esto causó un problema. Esto se debe a que el atributo a1El objeto también puede referir a otras subclases. Si creamos otra subclase Cat junto con Dog; el animal puede ser un gato o un perro, lo que puede causar ambigüedad.
Para resolver este problema, podemos usar el operador instanceof. Aquí está cómo hacerlo:
class Animal { } class Dog extends Animal { public void displayInfo() { System.out.println("Soy un perro"); } } class Main { public static void main(String[] args) { Dog d1 = new Dog(); Animal a1 = d1; // Conversión de tipo hacia arriba if (a1 instanceof Dog) { Dog d2 = (Dog)a1; // Conversión de tipo hacia abajo d2.displayInfo(); } } }
Salida:
Soy un perro
En el ejemplo anterior, usamos el operador instanceof para verificar a1¿Es el objeto una instancia de la clase Dog?. Solo cuando la expresión a1 La conversión de tipo hacia abajo se realiza solo cuando instanceof Dog es verdadero.
El operador instanceof también se utiliza para verificar si el objeto de una clase es una instancia de la interfaz que implementa la clase.
interface Animal { } class Dog implements Animal { } class Main { public static void main(String[] args) { Dog d1 = new Dog(); System.out.println("d1¿Es el objeto una instancia de Animal?: "+(d1 instanceof Animal)); } }
Salida:
d1¿Es el objeto una instancia de Animal?: true
En el ejemplo anterior, creamos una clase Dog que implementa la interfaz Animal.
Luego, creamos un objeto de la clase Dog d1Hemos utilizado el operador instanceof para verificar d1¿Es el objeto también una instancia de la interfaz Animal?.