java继承后构造函数的继承机制

最近在复习一些java基础的东西。发现继承后构造函数的继承很有意思,所以进行了一下测试:

  • 测试1-如果父类不主动创建构造函数则子类创建构造函数没有限制。
  • 测试2-如果父类创建不含参构造函数则子类创建构造函数没有限制且先执行父类的构造函数。
  • 测试3-如果父类创建含参构造函数则子类创建构造函数需要先super父类函数且先执行父类的构造函数。
  • 测试4-如果父类创建多个含参构造函数则子类创建构造函数需要先super指定的父类函数(如父类包含无参构造函数则子类可以不super父类函数同测试2)。

测试1-如果父类不主动创建构造函数则子类创建构造函数没有限制

父类

public class Father {

}

子类

public class Child extends Father {

    public Child(String a, int b) {

        System.out.println("这是子类的构造函数");
    }
    public static void main(String[] args) {

        Child t3 = new Child("xx",1);

    }
}

结果

这是子类的构造函数

测试2-如果父类创建不含参构造函数则子类创建构造函数没有限制且先执行父类的构造函数

父类

public class Father {

    public Father() {
        System.out.println("这是父类的构造函数");
    }
}

子类

public class Child extends Father {

    public Child(String a, int b) {

        System.out.println("这是子类的构造函数");
    }
    public static void main(String[] args) {

        Child t3 = new Child("xx",1);

    }
}

结果

这是父类的构造函数
这是子类的构造函数

测试3-如果父类创建含参构造函数则子类创建构造函数需要先super父类函数且先执行父类的构造函数

父类

public class Father {

    public Father(int a) {
        System.out.println("这是父类的构造函数");
    }
}

子类

public class Child extends Father {

    public Child(String a, int b) {
        super(1);
        System.out.println("这是子类的构造函数");
    }
    public static void main(String[] args) {

        Child t3 = new Child("xx",1);

    }
}

结果

这是父类的构造函数
这是子类的构造函数

测试4-如果父类创建多个含参构造函数则子类创建构造函数需要先super指定的父类函数(如父类包含无参构造函数则子类可以不super父类函数同测试2)

父类

public class Father {

    public Father(int a) {
        System.out.println("这是父类的构造函数1");
    }
    public Father(String b) {
        System.out.println("这是父类的构造函数2");
    }
}

子类

public class Child extends Father {

    public Child(){
        super("a");
        System.out.println("这是子类的构造函数调用2");
    }
    public Child(String a, int b) {
        super(1);
        System.out.println("这是子类的构造函数调用1");
    }
    public static void main(String[] args) {

        Child t3 = new Child("xx",1);
        Child t4 = new Child();

    }
}

结果

这是父类的构造函数1
这是子类的构造函数调用1
这是父类的构造函数2
这是子类的构造函数调用2

综上测试得出如下结论:

1、如果父类不主动创建构造函数或者父类有无参的构造函数则子类可以不考虑父类的构造函数。
2、如果子类需要继承父类的含参构造函数则需要使用super命令(如果父类包含多个含参构造函数则依据参数使用super命令)
3、如果父类建立了构造函数且都含有参数,则子类必须使用super命令。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值