我是这么理解的哈,仅供参考.因为java分编译期和运行期.
BaseClass ploymorphicBc = new SubClass(); 对编译器来说,他的类型就是父类的BaseClass,因为父类有test方法,所以编译通过了.
然后运行时,实际上它是指向子类对象,子类本身复写了test方法,所以就执行了子类的test.
而 BaseClass ploymorphicBc = new SubClass(); 去调用sub方法,对编译器来说,BaseClass这个类是没有sub方法的,编译直接不通过.....也不用管他指向的是子类对象还是父类对象了.... |