父类与子类的构造顺序

来源:互联网 发布:yii2 开源 cms 编辑:程序博客网 时间:2024/05/18 05:44

今天有人问我父类跟子类的构造顺序问题,写了个例子,姑且记一下

直接上代码吧

先是父类:

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 stubthis.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.调用子类 构造器

0 0
原创粉丝点击