Down casting: The concept of collecting Child object address back to Child type reference variable from Parent type.
By assigning Child object address into Child type variable, we can access the complete functionality of Parent and Child.
class Parent
{
void m1(){
System.out.println("Parent's functionality - m1");
}
}
class Child extends Parent
{
void m1(){
System.out.println("Child's functionality - m1");
}
void m2(){
System.out.println("Child's functionality - m2");
}
}
class Downcast
{
public static void main(String args[ ])
{
Child obj = new Child();
obj.m1();
obj.m2();
}
}
- By up casting, we can access only the common functionality(overridden) of Child.
- We cannot access specific functionality of Child using Parent type reference variable.
class Parent
{
void m1(){
System.out.println("Parent's functionality - m1");
}
}
class Child extends Parent
{
void m1(){
System.out.println("Child's functionality - m1");
}
void m2(){
System.out.println("Child's functionality - m2");
}
}
class Downcast
{
public static void main(String args[ ])
{
Parent obj = new Child();
obj.m1();
obj.m2(); // Error : Not common functionality.
}
}
To access the specific functionality of Child, we need to down cast to get back the address of Child from Parent.
class Parent
{
void m1(){
System.out.println("Parent's functionality - m1");
}
}
class Child extends Parent
{
void m1(){
System.out.println("Child's functionality - m1");
}
void m2(){
System.out.println("Child's functionality - m2");
}
}
class Downcast
{
public static void main(String args[ ])
{
Parent obj = new Child();
obj.m1();
Child c = (Child)obj ;
c.m2();
}
}
What is the use of Down-casting?
interface Parent
{
void childMobileNum();
}
abstract class Child implements Parent
{
public abstract void childFriendMobileNum();
public void childMobileNum()
{
System.out.println("Child Mobile Num is : 9944887373");
}
}
class ChildFriend extends Child
{
public void childFriendMobileNum()
{
System.out.println("Child Friend Mobile Num is : 7766227373");
}
}
class Downcast
{
public static void main(String args[ ])
{
Parent p = new ChildFriend();
p.childMobileNum();
// p.childFriendMobileNum(); --> Error : Specific to Child - Cannot access with Parent
Child c = (Child)p ;
c.childMobileNum();
c.childFriendMobileNum();
}
}
Why we need to specify the Child while down casting?
Answer : Number of Child class inherit same parent functionality. One Child cannot extend multiple parent classes functionality. Java doesn’t support Multiple Inheritance concept.