Suppose I have a class A which defines a method bar(). The method bar() calls another method foo(). I then extend A in B and override foo() and do not override bar() (so it gets inherited). Which foo() is being called in these two cases?
A a = new B();
a.bar(); // A or B's foo called?
B b = new B();
b.bar(); // A or B's foo called?
Both uses use B’s foo().
A a is just accessing B’s methods since B is the instance.
Think of A a as the interface for the instance, in this case: new B()
Here’s an example (in groovy):
http://groovyconsole.appspot.com/script/616002