请教高手解答一个难题!关于类中方法执行顺序
class person{
protected String name = "unknow";
protected int age = 0;
public person(String name,int age){
this.name = name;
this.age = age;
display();
}
public void display(){
System.out.println("person+"+name+"+"+age);
}
}
class student extends person{
private int sno = 00;
public student(String name,int age,int sno){
super(name,age);
this.sno = sno;
display();
}
public void display(){
System.out.println("student+"+name+"+"+age+"+"+sno);
}
}
public class test{
public static void main(String[] args){
student jjj = new student("张三",19,200);
}
}
为什么输出是:student+张三+19+0
student+张三+19+200
问题点数:10、回复次数:5Top
1 楼congliu(取次花丛都不顾,半缘修道半缘君。)回复于 2005-08-02 11:40:01 得分 0
当然是。
因为调用子类的构造函数时肯定先调用父类的构造函数。
在person的构造函数中有dispaly(),所以先输出了student+张三+19+0,然后调用子类的构造函数中的display(),所以输出student+张三+19+200
Top
2 楼homesos(熊猫贩子)回复于 2005-08-02 11:48:40 得分 0
因为,在构造子类时需要首先调用父类的构造方法。
应该是先调用父类的display()方法,再调用子类student 的方法。
又因为,子类student 覆盖了父类的display()方法,因此,在调用父类构造方法时使用了子类student 的该方法。
在父类调用其子类student 的方法时,private int sno = 00;
故输出:student+张三+19+0
尔后,子类student 又调用了自己的display()方法,正常输出结果:
student+张三+19+200
Top
3 楼interhanchi(on the Java Road)回复于 2005-08-02 12:13:33 得分 0
继承中的加载顺序是先父类,后子类!Top
4 楼believefym(feng)回复于 2005-08-02 13:34:24 得分 0
注意,当父类构造函数只有带参数的构造函数时,子类构造函数里面必须显式调用父类构造函数,
如super(para1,para2...)Top
5 楼chasnoly(chasnoly)回复于 2005-08-02 13:44:30 得分 0
楼主说得很明白啦。我再补充一下执行顺序。在创建子类对象,系统寻找子类构造方法时,会默认一个super()方法,用它去调用父类的构造方法。父类的构造方法带参数时则要明确调用super()方法。Top




