Forums Register Login
Casting question
If this has been asked recently feel free to direct me to the right post...

I understand it is possible to downcast a parent object to a child object. For example:

Asuusming child extends parent
Parent p = new Parent();
Child c = new Child();

c = (Child)p;

When would this be necessary? And when would this be a bad idea? Thanks.
I posted an example of this yesterday under this topic. See if that makes sense, and come back with any questions.

Originally posted by Tony Smith:
When would this be necessary? And when would this be a bad idea? Thanks.

you should do this if:
1) you are 100% sure the object is a Child, or a subclass of Child (p instanceof Child returns true). Your object inheritance tree might ensure that.
2) you need the extra methods / fields that Child provides and Parent does not.

If 1) does not hold you may get a ClassCastException if the is not a Child. If 2) does not hold then there is no reason to cast.
Following on from Rob's post, this kind of thing would work:

The compiler assures us the parameter is a Parent or some extension of it, but it can't guarantee that the parameter is a Child. If we left out the instanceof test and somebody passed in a Parent, the (Child)x cast would throw an exception.

This kind of test and cast is often a sign of a design that we should improve, but sometimes it's hard to avoid.

Originally posted by Tony Smith:

Parent p = new Parent();
Child c = new Child();

c = (Child)p;

Note that your code, as written, is not valid. We know that the run-time type of p is Parent, not Child (because we can see that you instantiated it that way). Casting is appropriate where the run-time type is actually a child, and it is not, here.

Also, note that you are creating a new Child object and assigning it to c, only to be overwritten in the next line. Are you sure you understand the difference between defining a variable, and initializing it?

- Adam
Beauty is in the eye of the tiny ad.
Rocket Oven Kickstarter - from the trailboss

This thread has been viewed 685 times.

All times above are in ranch (not your local) time.
The current ranch time is
Jul 18, 2018 05:01:26.