I implemented this code:
class A { //some code } class B extends A { // some code } class C { public static void main(String []args) {
A a1 = (B) new A();
Because A is NOT B.
A
B
Compile time works because you are casting and explicitly guaranteeing compiler that you are sure at runtime A will be B .