Java中关于子类调用父类无参还是有参构造方法的各个类型

1.子类和父类都定义了带参和无参构造方法,且在子类中第一行写了super(xx);并且测试类里面实例化的是子类的带参构造方法,那么,此时不会先调用父类的无参构造方法,而是先调用父类有参构造方法再调用子类的有参构造方法;

下面上代码和结果:

Java中关于子类调用父类无参还是有参构造方法的各个类型

Java中关于子类调用父类无参还是有参构造方法的各个类型

Java中关于子类调用父类无参还是有参构造方法的各个类型

 

结果是:

Java中关于子类调用父类无参还是有参构造方法的各个类型

2.2、子类和父类同时具有有参和无参的构造方法,子类有参构造方法中第一行写的没有super.(xx),且子类实例化时用的是有参构造方法,那么此时会先调用父类的无参构造方法,再调用子类的有参构造方法;

代码还是相同,只是去掉子类中的super(xx);

结果:

Java中关于子类调用父类无参还是有参构造方法的各个类型

 

3.子类和父类同时具有有参和无参的构造方法,子类无参构造方法中第一行写的有super.(),且子类实例化时用的是无参构造方法,那么此时先调用父类的无参构造方法再调用子类的无参构造方法;

代码相同,子类无参构造方法中添加super(xx);同时用无参构造来实例化子类

结果:

Java中关于子类调用父类无参还是有参构造方法的各个类型

4.子类和父类同时具有有参和无参的构造方法,子类无参构造方法中第一行写的没有super.(),且子类实例化时用的是无参构造方法,那么此时会先调用父类的无参构造方法,再调用子类的无参构造方法;

代码相同,子类无参构造方法中删除super();同时使用无参构造方法实例化子类

结果:

Java中关于子类调用父类无参还是有参构造方法的各个类型

5.父类具有有参和无参的构造方法,但子类只有有参且第一行写的没有super.,那么子类实例化时会先调用父类的无参构造方法,再调用子类的有参构造方法;

结果:Java中关于子类调用父类无参还是有参构造方法的各个类型

6.父类具有有参和无参的构造方法,但子类只有无参且第一行写的没有super.,那么子类实例化时会先调用父类的无参构造方法,再调用子类的无参构造方法;

结果:Java中关于子类调用父类无参还是有参构造方法的各个类型

7.父类具有有参和无参的构造方法,但子类只有有参构造方法且第一行写的有super.,那么子类实例化时先调用父类的有参构造方法,再调用子类的有参构造方法;

结果:Java中关于子类调用父类无参还是有参构造方法的各个类型

8.父类具有有参和无参的构造方法,但子类只有无参构造方法且第一行写的有super.,那么子类实例化时先调用父类的无参构造方法,再调用子类的无参构造方法;

结果:Java中关于子类调用父类无参还是有参构造方法的各个类型

9.假如父类只有有参构造方法,子类也只有有参构造方法,那么子类的有参构造方法中必须写super.xx,不然编译会不通过。

 

自己试过了的,应该没错,出错了希望大家告诉我