WojciechKo
WojciechKo

Reputation: 1531

how to copy SubClass object in BaseClass copy constructor

I would like to make copy of SubClass object in BaseClass constructor. I need that the following code execute correctly.

class BaseClass{
    BaseClass() {}
    BaseClass(BaseClass base) {
        //TODO: how to implement?
    }
}

class SubClass extends BaseClass {    
   SubClass() {}
}

public class Test {
    public static void main(String[] args) {

        BaseClass sub = new SubClass();
        BaseClass subCopy = new BaseClass(sub);
        if (subCopy instanceof SubClass) {
            // need to be true
        }
    }
}

Is it even possible? If yes how can I do it? Else how can I get similar effect?

Upvotes: 0

Views: 1586

Answers (3)

Rahul Bobhate
Rahul Bobhate

Reputation: 5092

It seems like you want the object of BaseClass to be an instance of SubClass which extends BaseClass.

Is it even possible?

-No. It is not possible.

The instanceof operator returns true if the variable on left side satisfies IS-A condition of the variable or class on the left side.

The SubClass IS-A BaseClass since it extends BaseClass. But the BaseClass can never be a SubClass, since it can't extend SubClass.

Upvotes: 1

qqilihq
qqilihq

Reputation: 11474

It's not possible. A constructor of class A gives you an instance of A, no way to circumvent this. Why not instantiate the subclass explicitly?

Another possibility might involve a static factory method like:

public static BaseClass create(BaseClass input) {
       // return BaseClass or subclass
}

Upvotes: 3

Juned Ahsan
Juned Ahsan

Reputation: 68715

You seems to be having a design upside-down. If you need to do what you are asking then you need to re-think over your design. Ideally in your subclass constructor, you should be copying or initializing the base class properties by calling super().

Upvotes: 0

Related Questions