GeeCON Prague 2014*
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes References and casting Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "References and casting" Watch "References and casting" New topic
Author

References and casting

Ismael Upright
Ranch Hand

Joined: Feb 15, 2007
Posts: 166
Here's a bunch of definitions and reference declarations from jqplus6:



1. Let's say that we do the following:

o3 = o1;

It won't compile because superclass reference cannot be assigned to subclass reference without explicit cast. So I did the cast:

o3 = (C3)o1;

And Eclipse wrote:

Syntax error on token "o3", VariableDeclaratorId expected after this token.

Why?


2. There is another assignment:

o3 = o2;

It also seems to be not correct. Why? Both o2 and o3 IS A interface I2 so...?
Arie Prastowo
Greenhorn

Joined: Apr 20, 2008
Posts: 22
I don't know if you wrote the code correctly, but the last 3 code is written outside any class/interface definition


SCJP 5.0<br />Use the power of mind
Harshit Rastogi
Ranch Hand

Joined: Apr 15, 2008
Posts: 131
Originally posted by Ismael Upright:
Here's a bunch of definitions and reference declarations from jqplus6:

1. Let's say that we do the following:

o3 = o1;

It won't compile because superclass reference cannot be assigned to subclass reference without explicit cast. So I did the cast:

o3 = (C3)o1;

And Eclipse wrote:

Syntax error on token "o3", VariableDeclaratorId expected after this token.

Why?

becuase you cannot downcast an object , you can only upcast
it means you can do
Parent obj = new ChildBoj()
or
Parent obj = (Parent) new ChildObj();
but not
Child obj = new Parentobj()
or Child obj = (ChildObj) new ParentObj()


2. There is another assignment:

o3 = o2;

It also seems to be not correct. Why? Both o2 and o3 IS A interface I2 so...?


in this case 03 is an object of type C3 and o2 of C2 and not of type interface I2


<a href="http://technologiquepanorama.wordpress.com" target="_blank" rel="nofollow">My Techie Blog</a><br /><a href="http://www.java-questions.com" target="_blank" rel="nofollow">Java Questions</a>
Ismael Upright
Ranch Hand

Joined: Feb 15, 2007
Posts: 166
I figured out my mistake, it was lack of the main method

After fix the code looks like this:



It is possible to make a downcast.

But still I don't understand why we cannot assign o3 to o2. For me it's assigning an object which IS-A interface I2 to the reference which also IS-A interface I2 so it should work.

Isn't it?
[ April 21, 2008: Message edited by: Ismael Upright ]
Arie Prastowo
Greenhorn

Joined: Apr 20, 2008
Posts: 22
In my understanding, you can't do that because o3 was declare as C3 so it expected also C3 and all it's subclasses
Ismael Upright
Ranch Hand

Joined: Feb 15, 2007
Posts: 166
But C3 was also declared as I2, which means that every C3 IS-A I2..
Arie Prastowo
Greenhorn

Joined: Apr 20, 2008
Posts: 22
when you said C3 IS-A I2, only valid in class definition where C3 IS-A C1 and I2.
But when you declare
static C3 o3;
the compiler expect something that come from C3 or it subclasses.
It would make a different if you code
static I2 o3;
since it can accept anything that implement I2 including o2
Ismael Upright
Ranch Hand

Joined: Feb 15, 2007
Posts: 166
You're right, I forgot about that.


Thanks!
 
GeeCON Prague 2014
 
subject: References and casting