看源码,看到:
- 父类声明方法A
- 父类内部调用方法A
- 子类覆盖了父类的方法A
- 实例化子类,在父类中调用方法A实际调用的是子类的方法
- 实例化父类,父类调用的就是自己的方法了。
具体怎么说,需要看《Java编程思想》吧
public abstract class GrandMother {
protected void topMethod() {
System.out.println("GrandMother -- topMethod");
}
}
public abstract class Mother extends GrandMother {
public Mother(){
System.out.println(middleMethod());
}
protected String middleMethod() {
return "Mother - middleMethod";
}
public static void main(String[] args) {
(new Mother()).topMethod();
}
}
public class Daughter extends Mother {
protected String middleMethod() {
return "Daughter - middleMethod";
}
public static void main(String[] args) {
(new Daughter()).topMethod();
}
}
Daughter run~~,因为实例是Daughter的,Daughter 覆盖了Mother 的方法。
Daughter - middleMethod GrandMother -- topMethod
Mun run~~
Mother - middleMethod GrandMother -- topMethod



