Breaking

Post Top Ad

Your Ad Spot

jueves, 19 de diciembre de 2019

Java instanceof

En este tutorial, aprenderá sobre la instancia Java del operador en detalle con la ayuda de ejemplos.
En Java, la  instanceof palabra clave es un operador binario. Se utiliza para verificar si un objeto es una instancia de una clase en particular o no.
El operador también verifica si un objeto es una instancia de una clase que implementa una interfaz (se discutirá más adelante en este tutorial).
La sintaxis del instanceofoperador es:
  1. result = objectName instanceof className;
El operando izquierdo del instanceofoperador es el nombre del objeto y el operando derecho es el nombre de la clase. El resultado será truesi un objeto es una instancia de una clase y falsesi no lo es.

Ejemplo 1: instancia de

  1. class Main {
  2. public static void main (String[] args) {
  3. String name = "Programiz";
  4. Integer age = 22;
  5. System.out.println("Is name an instance of String: "+ (name instanceof String));
  6. System.out.println("Is age an instance of Integer: "+ (age instanceof Integer));
  7. }
  8. }
Cuando ejecutamos el programa, la salida será:
Es name una instancia de String: true
Es la edad una instancia de Integer: verdadero
En el ejemplo anterior, hemos creado un nombre de objeto del Stringtipo y otra edad de objeto del Integertipo. Luego utilizamos el instanceofoperador para verificar si el nombre es del Stringtipo y la edad es del Integertipo.

Uso de instanceof en herencia

En el caso de la herencia, el instanceofoperador se utiliza para verificar si un objeto de una subclase es también una instancia de la superclase.

Ejemplo 2: instancia de herencia

  1. class Animal {
  2. }
  3. class Dog extends Animal {
  4. }
  5. class Main {
  6. public static void main(String[] args){
  7. Dog d1 = new Dog();
  8. System.out.println("Is d1 an instance of Dog: "+ (d1 instanceof Dog));
  9. System.out.println("Is d1 an instance of Animal: "+ (d1 instanceof Animal));
  10. }
  11. }
Cuando ejecutamos el programa, la salida será:
Es d1 es una instancia de Dog: true
¿Es d1 una instancia de Animal: verdadero?
En el ejemplo anterior, d1 es una instancia de la clase Perro y Animal . Por lo tanto, ambos d1 instanceof Dogd1 instanceof Animalresultado a true.

La clase de objeto

En Java, todas las clases se heredan de la clase Object . La extendspalabra clave no se usa durante la herencia de la clase Object . Esta es una excepción en Java.

Ejemplo 3: clase de objeto

  1. class Animal {
  2. }
  3. class Dog {
  4. }
  5. class Cat {
  6. }
  7. class Main {
  8. public static void main(String[] args) {
  9. Dog d1 = new Dog();
  10. Animal a1 = new Animal();
  11. Cat c1 = new Cat();
  12. System.out.println("Is d1 an instance of the Object class: "+ (d1 instanceof Object));
  13. System.out.println("Is a1 an instance of the Object class: "+ (a1 instanceof Object));
  14. System.out.println("Is c1 an instance of the Object class: "+ (c1 instanceof Object));
  15. }
  16. }
Cuando ejecutamos el programa, la salida será:
¿Es d1 una instancia de la clase Object: true
Es a1 una instancia de la clase Object: true
¿Es c1 una instancia de la clase Object: true
En el ejemplo anterior, hemos creado los objetos a1 , d1 y c1 de las clases Animal , Perro y Gato , respectivamente. Hemos utilizado el instanceofoperador para verificar si estos objetos a1 , d1 y c1 también son objetos de la clase Object . Los resultados de salida truepara todos.
Esto se debe a que la clase Object es la clase raíz definida en el java.langpaquete. Todas las otras clases son clases secundarias de la Objectclase que forman una jerarquía en Java.

Objeto Upcasting y Downcasting

En Java, un objeto de una subclase puede tratarse como un objeto de la superclase. Esto se llama upcasting.
El compilador de Java realiza automáticamente la conversión.

Ejemplo 4: conversión de objetos

  1. class Animal {
  2. public void displayInfo() {
  3. System.out.println("I am an animal.");
  4. }
  5. }
  6. class Dog extends Animal {
  7. }
  8. class Main {
  9. public static void main(String[] args) {
  10. Dog d1 = new Dog();
  11. Animal a1 = d1;
  12. a1.displayInfo();
  13. }
  14. }
Cuando ejecutas el programa, la salida será:
Soy un animal
En el ejemplo anterior, hemos creado un objeto d1 de la clase Dog . Usamos ese objeto d1 para crear un objeto a1 de la clase Animal con conversión ascendente.
El código se ejecuta sin ningún problema. Esto se debe a que los compiladores de Java realizan la carga automáticamente.
Downcasting es un procedimiento inverso de upcasting.
En el caso de downcasting, un objeto de la superclase se trata como un objeto de la subclase. Tenemos que indicar explícitamente al compilador que descargue en Java.

Ejemplo 5: problema de conversión de objetos

  1. class Animal {
  2. }
  3. class Dog extends Animal {
  4. public void displayInfo() {
  5. System.out.println("I am a dog.");
  6. }
  7. }
  8. class Main {
  9. public static void main(String[] args) {
  10. Dog d1 = new Dog();
  11. Animal a1 = d1; // Upcasting
  12. Dog d2 = (Dog)a1; // Downcasting
  13. d2.displayInfo();
  14. }
  15. }
Cuando ejecutamos el programa, obtendremos la ClassCastExceptionexcepción. Veamos que pasa aquí.
Aquí, hemos creado un objeto a1 de la superclase Animal . Luego intentamos lanzar el objeto a1 al objeto d1 de la subclase Dog .
Esto causó el problema. Esto se debe a que el objeto a1 de la superclase Animal también puede referirse a otras subclases. Si hubiéramos creado otra subclase Cat junto con Dog ; el animal tal vez gato o tal vez perro causando ambigüedad.
Para resolver este problema podemos usar el instanceofoperador. Así es cómo:

Ejemplo 6: Resolver Downcasting usando instanceof

  1. class Animal {
  2. }
  3. class Dog extends Animal {
  4. public void displayInfo() {
  5. System.out.println("I am a dog");
  6. }
  7. }
  8. class Main {
  9. public static void main(String[] args) {
  10. Dog d1 = new Dog();
  11. Animal a1 = d1; // Upcasting
  12. if (a1 instanceof Dog){
  13. Dog d2 = (Dog)a1; // Downcasting
  14. d2.displayInfo();
  15. }
  16. }
  17. }
Cuando ejecutamos este programa, la salida será:
soy un perro
En el ejemplo anterior, usamos el instanceofoperador para verificar si el objeto a1 es una instancia de la clase Dog o no. El downcasting se realiza solo cuando la expresión a1 instanceof Doges verdadera.

instancia de en la interfaz

El instanceofoperador también se utiliza para verificar si un objeto de una clase también es una instancia de la interfaz desde donde se implementa la clase.

Ejemplo 7: instancia de en la interfaz

  1. interface Animal {
  2. }
  3. class Dog implements Animal {
  4. }
  5. class Main {
  6. public static void main(String[] args) {
  7. Dog d1 = new Dog();
  8. System.out.println("Is d1 an instance of Animal: "+(d1 instanceof Animal));
  9. }
  10. }
Cuando ejecutamos el programa, la salida será:
¿Es d1 una instancia de Animal: verdadero?
En el ejemplo anterior, hemos creado una clase Dog que implementa la interfaz Animal .
Luego, se crea el objeto d1 de la clase Perro . Hemos utilizado el instanceofoperador para verificar si el objeto d1 también es una instancia de la interfaz Animal .

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas