• Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Question on Marcus Green's Exam 1

 
bryce johnson
Greenhorn
Posts: 13
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
On Marcus Green's Exam 1, question 17 says:
What will happen if you attempt to compile and run the following code?
class Base {}
class Sub extends Base {}
class Sub2 extends Base {}
public class CEx{
public static void main(String argv[]){Base b=new Base();
Sub s=(Sub) b;
}
}
1) Compile and run without error
2) Compile time Exception
3) Runtime Exception
The answer was 3.
The reason:
Without the cast to sub you would get a compile time error. The cast tells the compiler that you really mean to do this and the actual type of b does not get resolved until runtime. Casting down the object hierarchy is a problem, as the compiler cannot be sure what has been implemented in descendent classes. Casting up is not a problem because sub classes will have the features of the base classes. This can feel counter intuitive if you are aware that with primitives casting is allowed for widening operations (ie byte to int).

I thought that as long as the casting made since you could would be able to explicitly cast down. Am I wrong. I am having problems and can't run the code.
 
fuji wara
Greenhorn
Posts: 4
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
hi
sometimes u encounter this, during runtime the casting function fail.
sometimes i encounter this but do not know what is the reason.
somebody please enlighten (any reference)
 
Rajeshwari Natarajan
Ranch Hand
Posts: 67
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
b can refer to an object of base class or any of the sub-classes down the hierarchy. So it gives no error at compile time. The actual object reference is checked at run time and hence u get class cast exception if there is a mismatch.
Consider the following code..it will compile and run perfectly coz s1,s2 and b all refer to object of Sub
 
Chetan M
Ranch Hand
Posts: 43
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Very good example Rajeshwari.
[ March 23, 2003: Message edited by: Chetan M ]
 
bryce johnson
Greenhorn
Posts: 13
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
It seems that if 'b' is cast to Sub, then there should be no problem because Sub extends Base and they are basically the same class. There should be no missmatch. Right?
 
Rajeshwari Natarajan
Ranch Hand
Posts: 67
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by bryce johnson:
It seems that if 'b' is cast to Sub, then there should be no problem because Sub extends Base and they are basically the same class. There should be no mismatch. Right?

Sub extends Base but they are not the same classes. Sub inherits all the properties of Base but it may define its own additional properties which are unique to Sub and the Base has no way of knowing it.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic