i have two classes in java as:
class A {
int a=10;
public void sayhello() {
System.out.println("class A");
}
}
class B extends A {
int a=20;
public void sayhello() {
System.out.println("class B");
}
}
public class HelloWorld {
public static void main(String[] args) throws IOException {
B b = (B) new A();
System.out.println(b.a);
}
}
at compile time it does not give error, but at runtime it displays an error : Exception in thread "main" java.lang.ClassCastException: A cannot be cast to B
This happens because the compile-time expression type of new A()
is A
- which could be a reference to an instance of B
, so the cast is allowed.
At execution time, however, the reference is just to an instance of A
- so it fails the cast. An instance of just A
isn't an instance of B
. The cast only works if the reference really does refer to an instance of B
or a subclass.