考虑以下因素:
parent: true
child: true
输出:
PRAGMA User_version
当在Child类中调用isMeh()时,它很明显,它调用重写的方法。
但是当在父对象的方法中调用overriden方法时,它仍会调用子对象的方法。
我看到我们创建了一个子对象,而parentMethod只是继承的,因此当我们调用isMeh()时,它会调用可用的(被覆盖的)对象。
在java中实现此实现的原因是什么?
答案 0 :(得分:1)
Parent
的继承层次结构中的任何类,无论是Child
,Parent
还是从它们派生的Grandchild
,都只有一个方法实现叫isMeh
。当Child
使用自己的实现覆盖isMeh
Parent
时,它将取代实现;就Child
而言,Parent
中的实施不再适用 * 。
当您实例化Child
并调用其parentMethod
时,该方法只能访问一种方法isMeh
- 即Child
提供的实现。这就是为什么你得到你描述的行为。
此行为允许非常好的模式:例如,您可以依靠通过覆盖提供的子类中的“插件”功能,在父级中编写方法的“部分实现”。这种技术称为Template Method Design Pattern。
* 虽然Child
仍然能够明确调用Parent
的{{1}}。