question about casting and inheritance
Hello,
I'm preparing for Java 7 OCA exam. I have a q about casting..
I learned you can cast a variable of a class to another object only if ther=
e's a hierarchical relation between the variable's class _and_ the object's=
class you cast to. And also, the varibla should point to an object og the =
class you're casting to or you get a ClassCastException during runtime.
So I made up this example:
class A {
String uniqueMethodForA(){
return ("uniqueMethodForA");
}
}
class B extends A {
String uniqueMethodForB(){
return ("uniqueMethodForB");
}
}
public class LearnJava{
public static void main(String[] args) throws Exception {
LearnJava LJ = new LearnJava();
A a = new A();
B b = new B();
System.out.println(a.uniqueMethodForA());
System.out.println(b.uniqueMethodForB());
a=b;
b=(B)a;
System.out.println("=============");
System.out.println(a.uniqueMethodForA());
System.out.println(b.uniqueMethodForB());
}
}
outputs:
uniqueMethodForA
uniqueMethodForB
=============
uniqueMethodForA
uniqueMethodForB
As you see variable a points to an instance of A and not to (an instance of=
) B. I effectively say "treat a as if it is b". I can even call a method on=
b that is unique for B. But a didn't point to an instance of B in the firs=
t place at all!
Why is it the line b=(B)a; doesn't give me a ClassCastException during ru=
ntime?