Casting de tipo de clase en Java

Typecasting es la evaluación del valor de un tipo de datos primitivo a otro tipo. En Java, hay dos tipos de conversión, a saber, conversión hacia arriba y hacia abajo, de la siguiente manera:

  1. Upcasting es convertir un subtipo en un supertipo en dirección ascendente hacia el árbol de herencia. Es un procedimiento automático para el cual no se realizan esfuerzos para hacerlo donde un objeto de subclase es referido por una variable de referencia de superclase. Se puede relacionar con el polimorfismo dinámico.
    • Conversión implícita significa encasillamiento de clase realizado por el compilador sin sintaxis de conversión.
    • Casting explícito significa encasillado de clase realizado por el programador con sintaxis cast.
  2. Downcasting se refiere al procedimiento cuando el tipo de subclase se refiere al objeto de la clase principal y se conoce como downcasting. Si se realiza directamente, el compilador da un error ya que ClassCastException se lanza en tiempo de ejecución. Solo se puede lograr con el uso del operador instanceof . El objeto que ya está hacia arriba, ese objeto solo se puede realizar hacia abajo.

Para realizar la conversión de tipo de clase, debemos seguir estas dos reglas de la siguiente manera:

  1. Las clases deben ser «IS-A-Relationship»
  2. Un objeto debe tener la propiedad de una clase en la que se va a lanzar.

Implementación: 

(A) Reenvío

Ejemplo 1

Java

// Importing input output classes
import java.io.*;
 
// Class 1
// Parent class
class Parent
{
 
  // Function
  void show()
  {
 
    // Print message for this class
    System.out.println("Parent show method is called");
  }
} 
 
// Class 2
// Child class
class Child extends Parent
  {
 
    // Overriding existing method of Parent class
    @Override
 
    // Same Function which will override
    // existing Parent class function
    void show()
    {
 
    // Print message for this class
    System.out.println("Child show method is called");
    }
 
  }
 
// Class3
// Main class
class GFG
{
 
    // Main driver method
    public static void main(String[] args)
    {
      // Creating a Parent class object
      // but referencing it to a Child class
       Parent obj = new Child();
       
      // Calling the show() method to execute
       obj.show();
    }
}
Producción

Child show method is called

Explicación de la salida: aquí se llama al objeto de la clase principal, pero se hace referencia al objeto de la clase del hijo. Por lo tanto, uno puede relacionar esto con el polimorfismo dinámico o la anulación de funciones. 

(B) Reducción

Ejemplo 2

Java

// Java Program to illustrate Downcasting
 
// Importing input output classes
import java.io.*;
 
// Class 1
// Parent class
class Vehicles {
}
 
// Class 2
// Child class
class Car extends Vehicles {
    static void method(Vehicles v)
    {
 
        //
        if (v instanceof Car) {
 
            // Downcasting
            Car c = (Car)v;
 
            // Display message
            System.out.println("Downcasting performed");
        }
    }
    // Main driver method
    public static void main(String[] args)
    {
        // Creating an object of Vehicle class
        // and referring it to Car class
        Vehicles v = new Car();
        Car.method(v);
    }
}
Producción

Downcasting performed

NOTA: Sin realizar upcast si intentamos downcast, se lanzará ClassCastException.

  • Es una excepción de tiempo de ejecución o una excepción no verificada.
  • Es una clase, presente en el paquete java.lang .
  • Se puede evitar usando un operador conocido como ‘instancia de’.

Ejemplo 3

Java

// Java Program showing ClassCastException
 
// Importing input output classes
import java.io.*;
 
// Class 1
// Parent class/ Member class
class Member {
 
    // Member variable of this class
    String name;
    long phone;
 
    // Member function of this class
    void chat()
    {
 
        // Print message of Member/ Child class
        System.out.println(
            name + " : chatting in whatsapp group");
    }
}
 
// Class 2
// Child class/ Admin class
class Admin extends Member {
 
    // Member function of this class
    void addUser()
    {
 
        // Print message of Admin/ Parent class
        System.out.println(
            name
            + " : adding a new user in whatsapp group");
    }
}
 
// Class3 - Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating an object Ad
        Member mem = new Admin();
 
        // Upcasting access only general property of
        // superclass
 
        // Custom entry for Member class
        mem.name = "Sneha";
        mem.phone = 9876543210l;
        // Calling function
        mem.chat();
 
        Admin ad = (Admin)mem;
 
        // Downcast to access specific property of subclass
        ad.addUser();
    }
}
Producción

Sneha : chatting in whatsapp group
Sneha : adding a new user in whatsapp group

Publicación traducida automáticamente

Artículo escrito por devefullstack404 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *