// Polymorphism and aliases class A {} class B extends A {} public class poly { public static void main(String[] args) { A a1 = new A(); A a2 = new A(); B b1 = new B(); B b2 = new B(); // Since a B can be an A, // Could have said $A a1 = new B()$, so: a1 = b1; // But, the reverse is difficult for Java: // b2 = (B) a2; // compiles, but won't run } }