您的位置:首页 > 编程语言 > Java开发

java继承:构造方法

2015-08-12 10:56 357 查看
子类继承父类,构造方法会默认先执行父类中无参的构造方法,在此之前声明一点,如果父类中有一个有参的构造方法,是不会给你生成无参构造方法的。

在实例化子类时,执行构造方法,先执行父类的构造方法(如果在第一行没指定,则会默认调用无参构造方法,如果没有无参构造方法,需在第一行用super指定一个父类的构造方法),即在实例化子类之前会先实例化父类。

只要类里有一个构造函数,就不会生成默认的无参构造函数。

举例子说明:

父类

[code]public class Base {
    public Base(){
        System.out.println("Base 无参数");
    }
    public Base(int i){
        System.out.println("Base 有参数");
    }
}


子类:

`public class AA extends Base{

public AA(){

System.out.println(“AA无参数”);

}

public AA(int i){

System.out.println(“AA有参”);

}

}`

测试:
@Test 

public void te(){ 

    AA aa=new AA(); 

    AA a2=new AA(3); 

}


输出:

Base 无参数

AA无参数

Base 无参数

AA有参

结论:在子类第一行没指定父类构造方法,会默认调用父类无参构造方法,且在实例化子类之前会先实例化父类。

如果父类变成如下

public class Base { 

//  public Base(){ 

//      System.out.println("Base 无参数"); 

//  } 

//  public Base(int i){ 

//      System.out.println("Base 有参数"); 

//  } 

}


输出:

AA无参数

AA有参

结论:此时父类会有一个自动生成的默认的无参构造函数,内容为空,子类构造函数第一行会先执行该函数,即先实例化父类。

如果只有一个有参的构造函数:

[code]public class Base {
//  public Base(){
//      System.out.println("Base 无参数");
//  }
    public Base(int i){
        System.out.println("Base 有参数");
    }
}


这个时候编译就会报错 。

结论:有一个有参的默认构造函数,则父类不会有无参默认构造函数,而在子类构造函数中的第一行没有指定父类的构造函数,默认调用父类无参构造函数,父类该没有,报错。

修改:在第一行子类第一行指定父类的构造方法。

[code]public class AA extends Base{
    public AA(){
        super(3);
        System.out.println("AA无参数");
    }
    public AA(int i){
        super(4);
        System.out.println("AA有参");
    }

}


输出:

Base 有参数

AA无参数

Base 有参数

AA有参
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: