This week's book / license giveaways are in the JDBC and Relational Databases and Java in General forums.
We're giving away four copies each of PostGIS in Action and Java Advanced Topics Training and have the authors on-line!
See this thread and this one for details.
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


My Techie Blog - Java Questions
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!
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: References and casting