其实在Parent p2 = new Child();时就已经将这个创建的Child对象隐式转换为父类Parent了。
在这里,你用的是override, 在一条继承链上,将一个对象转换为其所属类型以下的基类,调用被override的方法,是调用override得最远的版本。
如一个子类C转换为父类P1的父类P2,对P2的某个方法,如果P1用的new来重写,那么就只能调用P2的该方法,如果P1用的override,子类C没有重写,那么就调用P1的实现,如果C中也用override重写了,就调用C中的实现。但是如果C还有子类C1,C1中也用override重写了该方法,还是只能调用C中的实现,因为这个对象本质上是C类型的而不是C1类型,除非它之前就是C1转换来的。 |