Casting Object Data Types in Java
This tutorial guides you on how to cast object data types in Java programming. In this tutorial you will learn how to convert sub class object to super class type and super class type in to sub class type by casting object data types.
Casting object data types – Convert subclass object type to superclass
When you want to convert subclass object type to superclass type, it can be done by using super class reference to refer to sub class object and performing type casting with super class type as shown in the following example sup= (Super)new Sub() .
class Super { void method1(){ System.out.println("In Super"); } } class Sub extends Super { void method2(){ System.out.println("In Sub"); } } class Cast { public static void main(String args[]){ Super sup; //sup -> super class reference //casting sub class object data type to super class type sup= (Super)new Sub(); //sup refer to sub class object, sup.method1(); } }
Output
In Super
Note, in the above case we will be able to call method1() of super class, but we won’t be able to call the method2() of sub class. If you try to call method2() it would result in compile time error.
Therefore, in the above case, the programmer will be able to access all the methods of super class, but not the sub class methods. We can say programmer has access to only 50% of the functionalities.
Suppose, if we override the super class methods in the sub class as shown in the example below, then it is possible to access sub class methods but not the super class methods.
In either cases programmer will get only 50% functionality.
class Super { void method1(){ System.out.println("In Super"); } } class Sub extends Super { void method1(){ //override the super class method System.out.println("In Sub"); } } class Cast { public static void main(String args[]){ Super sup; //sup -> super class reference //casting sub class object data type to super class type sup= (Super)new Sub(); //sup refer to sub class object sup.method1(); } }
Output
In Sub
Casting object data types – Convert superclass data type to sub class type
When you want to convert superclass data type to subclass type, it can be done by taking sub class reference to refer to super class object and performing type casting with sub class type as shown in the following example sub= (Sub)new Super() .
class Super { void method1(){ System.out.println("In Super"); } } class Sub extends Super { void method2(){ System.out.println("In Sub"); } } class Cast { public static void main(String args[]){ Sub sub; //sub -> sub class reference //casting super class object data type to sub class type sub= (Sub)new Super(); //sub refer to super class object sub.method1(); } }
Output
Exception in thread "main" java.lang.ClassCastException: Super cannot be cast to Sub
Therefore, while converting super class type to sub class type, if you use super class object we cannot access any methods of super class or even sub class.
Try sub.method2(), that will also result in same error. So programmer will get 0% functionality in this case.
The solution to the above problem is try to create an object to sub class instead of creating an object to super class as shown in the following example.
class Super { void method1(){ System.out.println("In Super"); } } class Sub extends Super { void method2(){ System.out.println("In Sub"); } } class Cast { public static void main(String args[]){ //convert super class type to sub class type Super sup; //sup -> super class reference //create an object to sub class sup = new Sub(); //sup -> super class reference refer to sub class object //casting super class reference referring to sub class object with sub class type Sub sub = (Sub)sup; //access super class and sub class methods - 100% functionality access sub.method1(); sub.method2(); } }
Output
In Super In Sub
It is evident that if an object to sub class is created, then it is possible to access all the methods of super class and sub class. 100% functionality accessibility is acheived.
Note, this is the reason why in inheritance we always create an object to sub class, but not to super class.
Hope this tutorial helped you to understand the concepts of casting objects data types :-).
Also See:
- How to declare and initialize arrays in Java Programming ?
- Java 8 : Find union and intersection of two Lists (ArrayLists)
- Manipulate Java 8 Stream data sources or objects?
- Copy contents of a List to another List in Java
- Replace element in ArrayList at specific index
- Convert Integer List to int array
- Convert comma separated String to List
- Find intersection of two Sets
- Inheritance Java – Create object to subclass, but not to superclass ?