子类继承和调用父类构造方法的执行顺序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

子类继承和调用父类构造方法的执行顺序

1.如果子类没有定义构造方法,则调用父类的无参数的构造方法,.

2.如果子类定义了构造方法,且其第一行没有super,则不论子类构造方法是有参数还是无参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。

若子类构造方法中第一行是有参数或无参数的super,则直接转到对应的有参或无参父类构造方法中,而不再是首先执行无参构造方法;

3.如果子类调用父类带参数的构造方法,可以通过super(参数)调用所需要的父类的构造方法,且该语句做为子类构造方法中的第一条语句。

4.如果某个构造方法调用类中的其他的构造方法,则可以用this(参数),切该语句放在构造方法的第一条.

说白了:原则就是,先调用父亲的.(没有就默认调,有了就按有的调,反正只要有一个就可以了.)

package test;

class Father{

String s = "Run constructor method of Father";

public Father(){

System.out.println(s);

}

public Father(String str){

s= str;

System.out.println(s);

}

}

class Son extends Father{

String s= "Run constructor method of son";

public Son(){

//实际上在这里加上super(),和没加是一个样的

System.out.println(s);

}

public Son(String str){

this();//这里调用this()表示调用本类的Son(),因为Son()中有了一个super()了,所以这里不能再加了。

s = str;

System.out.println(s);

}

public Son(String str1, String str2){

super(str1+""+str2);//因为这里已经调用了一个父类的带参数的super("---")了,所以不会再自动调用了无参数的了。

s = str1;

System.out.println(s);

}

}

public class MyClass9 {

public static void main(String[] args){

1 Father obfather1 = new Father();

2 Father obfather2 = new Father("Hello Father");

3 Son obson1 = new Son();

4 Son obson2 = new Son("hello son");

5 Son obson3 = new Son("hello son","hello father");

}

}

===============

结果:

1 Run constructor method of Father

2 Hello Father

3 Run constructor method of Father

Run constructor method of son

4 Run constructor method of Father

Run constructor method of son

hello son

5 hello son hello father

hello son

若son的第一个有参构造方法变为:

public Son(String str)

{

Super(str);//这里调用this()表示调用本类的Son(),因为Son()中有了一个super()了,所以这里不能再加了。

s = str;

System.out.println(s);

}

则结果为:

Run constructor method of Father

Hello Father

Run constructor method of Father

Run constructor method of son

hello son

hello son

hello son hello father

hello son

相关文档
最新文档