在父方法中重写方法调用
Overridden method call in parent method
考虑以下因素:
public class Child extends Parent{
public boolean isMeh(){
return true;
}
public void childMethod() {
System.out.println("child: "+isMeh());
}
public static void main(String... args){
Child child = new Child();
child.parentMethod();
child.childMethod();
}
}
class Parent{
public boolean isMeh(){
return false;
}
public void parentMethod() {
System.out.println("parent: "+isMeh());
}
}
输出:
parent: true
child: true
很明显,在 Child class 中调用 isMeh() 时,它会调用重写的方法。
但是当在父对象对象的方法中调用被覆盖的方法时,它仍然调用子对象的方法。
我看到我们创建了一个子对象,而 parentMethod 只是继承的,所以当我们调用 isMeh() 时,它会调用可用的(覆盖的)对象。
在 java 中执行此操作的原因是什么?
Parent
的继承层次结构中的任何 class,无论是 Child
、Parent
,还是从它们派生的某些 Grandchild
,都有恰好是调用 isMeh
方法的一个实现。当 Child
用自己的实现覆盖 Parent
的 isMeh
时,它会替换实现;就 Child
而言,Parent
中的实施不再适用 *.
当您实例化 Child
并调用其 parentMethod
时,该方法只能访问一个方法 isMeh
- 即 Child
提供的实现。这就是为什么你会得到你所描述的行为。
这种行为允许非常好的模式:例如,您可以在父类中编写一个 "partial implementation" 方法,依靠子 class 提供的 "plug-in" 功能覆盖。这种技术被称为 Template Method Design Pattern.
* 虽然 Child
保留了显式调用 Parent
的 isMeh
的能力。
考虑以下因素:
public class Child extends Parent{
public boolean isMeh(){
return true;
}
public void childMethod() {
System.out.println("child: "+isMeh());
}
public static void main(String... args){
Child child = new Child();
child.parentMethod();
child.childMethod();
}
}
class Parent{
public boolean isMeh(){
return false;
}
public void parentMethod() {
System.out.println("parent: "+isMeh());
}
}
输出:
parent: true
child: true
很明显,在 Child class 中调用 isMeh() 时,它会调用重写的方法。
但是当在父对象对象的方法中调用被覆盖的方法时,它仍然调用子对象的方法。
我看到我们创建了一个子对象,而 parentMethod 只是继承的,所以当我们调用 isMeh() 时,它会调用可用的(覆盖的)对象。
在 java 中执行此操作的原因是什么?
Parent
的继承层次结构中的任何 class,无论是 Child
、Parent
,还是从它们派生的某些 Grandchild
,都有恰好是调用 isMeh
方法的一个实现。当 Child
用自己的实现覆盖 Parent
的 isMeh
时,它会替换实现;就 Child
而言,Parent
中的实施不再适用 *.
当您实例化 Child
并调用其 parentMethod
时,该方法只能访问一个方法 isMeh
- 即 Child
提供的实现。这就是为什么你会得到你所描述的行为。
这种行为允许非常好的模式:例如,您可以在父类中编写一个 "partial implementation" 方法,依靠子 class 提供的 "plug-in" 功能覆盖。这种技术被称为 Template Method Design Pattern.
* 虽然 Child
保留了显式调用 Parent
的 isMeh
的能力。