class Base { private String showMe() {
return "base";
} public void print() {
System.out.println(showMe());
}
}public class Sub extends Base { public String showMe() {
return "sub";
} public static void main(String[] args) {
Sub sub = new Sub();
sub.print();
}
}执行结果为“Base”。问题:为什么print()方法调用的是Base类的showMe()方法,而不是Sub类的showMe()方法?
private String showMe() {
return "base";
}
基类 base中这个方法是 私有的,子类没有办法重写,所以就是这个结果啦
System.out.println(showMe());
}你把这一句放在子类中,因为你重写showMe()方法,而调用print是在父类中调用的,所以只能调用父类中的方法,如果你把这一句放在子类中,则调用的是重写的方法,
public void print() {
System.out.println(super.showMe());
}
是调用父类中的方法,前提是showMe()为public
所以调用父类的print()方法
而父类方法当然不能调用子类的方法啊!!
感觉过程应该是这样的:
1 main()方法运行 用到print()方法 但是子类里并没有 所以去父类里面找
2 在父类里找到print()方法 执行 又用到showMe() 方法
3 父类本身找到了showMe()方法 发现是private的 所以子类不可能重写 所以不用再去子类里面查找showMe()方法
Sub sub = new Sub();
sub.print();
执行的时候,由于子类没有重写父类的print方法,所以会首先调用父类的print方法,
其次,由于父类showMe()方法是私有,子类无法重写,这时候 只能再调用父类的showMe()方法了