今天有人问我父类跟子类的构造顺序问题,写了个例子,姑且记一下
直接上代码吧
先是父类:
package cn.extend;
public class Parent {
String name;
int age;
static String sex;
public Parent() {
System.out.println("Praent constructor is excuting");
// TODO Auto-generated constructor stub
this.name="Parent";
this.sex="female";
}
public void test(){
System.out.println("Praent's method test is excuting");
}
}
再是子类:
package cn.extend;
public class Son extends Parent {
public Son() {
// TODO Auto-generated constructor stub
System.out.println("Son constructor is excuting");
// this.name="Son";
// this.sex="male";
}
@Override
public void test() {
// TODO Auto-generated method stub
System.out.println("Son's method test is excuting");
}
/**
* add by liuchg
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Son son= new Son();
son.test();
System.out.println(son.name);
System.out.println(son.sex);
}
}
结果:
Praent constructor is excuting
Son constructor is excuting
Son's method test is excuting
Parent
female
说明在创建子类对象时,先调用父类的构造器,再调用子类的构造器;
将标红的代码去掉注释,执行结果如下:
Praent constructor is excuting
Son constructor is excuting
Son's method test is excuting
Son
male
子类继承父类,是把父类属性(public或者默认权限的、protected)继承下来,然后调用父类的构造函数来初始化这些属性,直致所有这些继承下来属性都初始化完毕,注:protected必须是在同一个包下。初始化顺序如下:
1.初始化父类 static 成员。 2.初始化子类 static 成员。 3.初始化父类非 static 成员。 4.初始化子类非 static 成员。 5.调用父类 构造器 6.调用子类 构造器