JAVA父子类构造方法执行顺序的小实验

JAVA父子类构造方法执行顺序

测试代码:

父类:

public class Test {
    String name;

    public Test(){
        System.out.println("父类无参数构造");
        TestPrint();
    }

//    public Test(String name){
//        this.name = name;
//        System.out.println("父类有参构造");
//    }

    public void TestPrint(){
        System.out.println("父类testPrint");
    };
}

子类:

public class TestChild extends Test {
    public String name;

    public TestChild(){
        super();
        System.out.println("子类无参数构造");
    }

//    public TestChild(String Name){
//        super(Name);
//        this.name = Name;
//        System.out.println("子类有参构造");
//    }

    public void TestPrint(){
        System.out.println("子类重写testPrint");
    }

    public static void main(String[] args) {
        TestChild test = new TestChild();
    }
}

实验一:

实验条件: 父子类只有无参构造

实验结果:

实验结论:先调用父类的无参构造,再调用子类的无参构造。

实验二:

实验条件:父子类有无参构造,也有有参构造。

实验结果:

1、子类调用无参构造:

2、子类调用有参构造:

3、子类有参构造中显示调用父类的有参构造:

实验结论:依旧是先调用父类的构造方法再调用子类的构造方法。当子类构造方法未显示调用父类的构造方法时。默认的是父类的无参构造。只有显示调用(super(name))才会调用父类的有参构造方法。

通过上述实验我们可以得出结论:

子类的构造方法总是先调用父类的构造方法,如果子类的构造方法没有明显的使用父类的哪个构造方法,子类就调用父类不带参数的构造方法。如果父类没有无参的构造函数,那么子类就需要在自己的构造函数中显示的调用父类的构造函数。

为了加深理解 我们通过一个小工具(jclasslib)看看内部new 子类时,到底发生了什么

我们可以很清楚的看到 在new 的对象中 构造方法的执行顺序,先执行 Test.<init> 也就是父类的构造方法,之后再进行自己内部的一些打印。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值