因为这是多态性(后期绑定)的示例。在编译时,您指定对象为类型
Parent,因此只能调用中定义的方法
Parent。但是在运行时,发生“绑定”时,将在对象上调用该方法,
Child无论该方法在代码中如何引用,该方法的类型都是如此。
令您惊讶的部分是为什么应在运行时调用覆盖方法。在Java中(与C#和C
++不同),所有方法都是虚拟的,因此将调用覆盖方法。请参见此示例以了解不同之处。

因为这是多态性(后期绑定)的示例。在编译时,您指定对象为类型
Parent,因此只能调用中定义的方法
Parent。但是在运行时,发生“绑定”时,将在对象上调用该方法,
Child无论该方法在代码中如何引用,该方法的类型都是如此。
令您惊讶的部分是为什么应在运行时调用覆盖方法。在Java中(与C#和C
++不同),所有方法都是虚拟的,因此将调用覆盖方法。请参见此示例以了解不同之处。