Check out the following basic code (assume that dog has a method called bark):


Dog d = new Dog();
Object o = d;

o.bark(); // error


But why? Isn't o just a pointer to a memory...