请教一个关于父类构造方法的问题。。。
是这样的:
public class shiyan {
public shiyan(){
jiao("");
}
void jiao(String a){
System.out.println("叫!");
}
}
public class shiyan2 extends shiyan {
public void jiao(String a) {
System.out.println("疯狂的叫!");
}
public static void main(String [] args){
shiyan2 shi=new shiyan2();
shi.jiao("");
}
}
这样显示输出的是:
疯狂的叫!
疯狂的叫!
而把父类中的jiao方法改成private,就显示:
叫!
疯狂的叫!
请问高手这是为什么呢?
------解决方案--------------------
首先,在子类构造时,会默认调用父类的无参构造函数。第一种情况是子类重写了父类的jiao方法,在父类构造时运行时绑定调用的是重写后的jiao方法;当你把父类的方法设为私有的时候,该方法只对本类可见,子类就不能重写父类的方法了,所以调用的是父类中的jiao方法。