日期:2014-05-20  浏览次数:20730 次

请教一个关于父类构造方法的问题。。。
是这样的:

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方法。