Open In App

Upcasting Vs Downcasting in Java

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

Typecasting is one of the most important concepts which basically deals with the conversion of one data type to another datatype implicitly or explicitly. In this article, the concept of typecasting for objects is discussed. 
Just like the data types, the objects can also be typecasted. However, in objects, there are only two types of objects, i.e. parent object and child object. Therefore, typecasting of objects basically means that one type of object (i.e.) child or parent to another. There are two types of typecasting. They are: 
 

  1. Upcasting: Upcasting is the typecasting of a child object to a parent object. Upcasting can be done implicitly. Upcasting gives us the flexibility to access the parent class members but it is not possible to access all the child class members using this feature. Instead of all the members, we can access some specified members of the child class. For instance, we can access the overridden methods.
  2. Downcasting: Similarly, downcasting means the typecasting of a parent object to a child object. Downcasting cannot be implicit.

The following image illustrates the concept of upcasting and downcasting:
 

Upcasting-Vs-Downcasting

Example: Let there be a parent class. There can be many children of a parent. Let’s take one of the children into consideration. The child inherits the properties of the parent. Therefore, there is an “is-a” relationship between the child and parent. Therefore, the child can be implicitly upcasted to the parent. However, a parent may or may not inherits the child’s properties. However, we can forcefully cast a parent to a child which is known as downcasting. After we define this type of casting explicitly, the compiler checks in the background if this type of casting is possible or not. If it’s not possible, the compiler throws a ClassCastException
Let’s understand the following code to understand the difference:
 

Java




// Java program to demonstrate
// Upcasting Vs Downcasting
 
// Parent class
class Parent {
    String name;
 
    // A method which prints the
    // signature of the parent class
    void method()
    {
        System.out.println("Method from Parent");
    }
}
 
// Child class
class Child extends Parent {
    int id;
 
    // Overriding the parent method
    // to print the signature of the
    // child class
    @Override void method()
    {
        System.out.println("Method from Child");
    }
}
 
// Demo class to see the difference
// between upcasting and downcasting
public class GFG {
 
    // Driver code
    public static void main(String[] args)
    {
        // Upcasting
        Parent p = new Child();
        p.name = "GeeksforGeeks";
 
        //Printing the parentclass name
        System.out.println(p.name);
        //parent class method is overridden method hence this will be executed
        p.method();
 
        // Trying to Downcasting Implicitly
        // Child c = new Parent(); - > compile time error
 
        // Downcasting Explicitly
        Child c = (Child)p;
 
        c.id = 1;
        System.out.println(c.name);
        System.out.println(c.id);
        c.method();
    }
}


Output

GeeksforGeeks
Method from Child
GeeksforGeeks
1
Method from Child

An illustrative figure of the above program:
 

Upcasting-Vs-Downcasting1

From the above example we can observe the following points: 
 

  1. Syntax of Upcasting: 
     
Parent p = new Child();
  1. Upcasting will be done internally and due to upcasting the object is allowed to access only parent class members and child class specified members (overridden methods, etc.) but not all members. 
     
// This variable is not 
// accessible
p.id = 1; 
  1. Syntax of Downcasting: 
     
Child c = (Child)p;
  1. Downcasting has to be done externally and due to downcasting a child object can acquire the properties of the parent object. 
     
c.name = p.name;
i.e., c.name = "GeeksforGeeks"

 



Last Updated : 23 Nov, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads