对于重载方法(overloaded method)的选择是静态的,而对于被改写的(overwritten method)方法的选择是动态的。------摘自《effective java》
这个该怎么来理解呢?其实就是说当出现继承关系时,到底是调用被改写的方法还是调用没有被改写的方法,是动态的决定的。是父类对象就调用父类方法,是子类对象就调用子类方法。而不管编译时的类型。如A的子类有B、C,A[ ] test = new A[ ]{ new A(),new B(),new C()},那么在以后通过test[i]来访问每个对象,则test[2]调用的是C对象改写的方法。对于重载方法来说,如果编译时类型就已经确定,在运行时虽然类型不同,但是不影响重载方法的选择。See 《Effective java》P109。