How to cast parent into child in Java

likaa picture likaa · Dec 2, 2017 · Viewed 41.6k times · Source

I am doing this:

Child child = (Child)parent;

Which gives me an error, I found it isn't possible to do it like this. I don't know exactly why, but I think it should be possible, if Child class inherits from Parent class, it contains the Parent object data.

My questions are:

  • Why it doesnt work?


  • How can i make this work, without setting every single parent's attribute like this

:

class Parent{
    public int parameter1;//...
    public int parameter1000;
}

class Child extends Parent
{
    public Child(Parent parent)
{
        this.parameter1 = parent.parameter1;//...
        this.parameter1000 = parent.parameter1000;
}
}

Answer

Akash Roy Choudhury picture Akash Roy Choudhury · Dec 2, 2017

Well you could just do :

Parent p = new Child();
// do whatever
Child c = (Child)p;

Or if you have to start with a pure Parent object you could consider having a constructor in your parent class and calling :

class Child{
    public Child(Parent p){
        super(p);
    }
}
class Parent{
    public Parent(Args...){
        //set params
    }
}

Or the composition model :

class Child {
    Parent p;
    int param1;
    int param2;
}

You can directly set the parent in that case.

You can also use Apache Commons BeanUtils to do this. Using its BeanUtils class you have access to a lot of utility methods for populating JavaBeans properties via reflection.

To copy all the common/inherited properties from a parent object to a child class object you can use its static copyProperties() method as:

BeanUtils.copyProperties(parentObj,childObject);

Note however that this is a heavy operation.