This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
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.
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
In my understanding, you can't do that because o3 was declare as C3 so it expected also C3 and all it's subclasses
Joined: Feb 15, 2007
But C3 was also declared as I2, which means that every C3 IS-A I2..
Joined: Apr 20, 2008
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