关于继承中,父类为什么必须要有无参构造方法,构造器在继承关系中的一些注意事项以及是否有必要使用super()?

当父类没有默认的构造方法的时候,子类的构造方法就会出错!

不管在什么时候,只要是继承的关系,构造函数的第一行都必须是对父类构造方法的调用。也就是说,每次你创建一个子类的实例之前,都会在内存中创建一个父类的新实例。即是会默认调用super()。

在这里我想问大家一个问题:就是子类在哪里调用了父类的构造方法
答案应该是:在子类构造方法的第一行中默认(不显示)调用super(),即调用了父类构造方法

java编译器会提供一个默认的无参构造方法。如果类没有提供任何构造方法,编译器则会自动生成。注意:默认的无参构造方法和你可以自己添加到类中的无参数构造方法之间没有任何区别。

如果一个父类有一个无参数的构造函数(不管它是手动声明的还是由编译器提供的),编译器将能够代表你添加super()一行。如下:

public class Demo6 {
    Demo6(int n , int t){}
    Demo6(){}//无参的构造方法
}

class Test extends Demo6{
    Test(){}
}

如果父类中只有参数化的构造函数,你必须在子类的构造函数中手动添加调用super(name, salary)作为第一行,否则代码将无法编译。如下:

public class Demo6 {
    Demo6(int n , int t){}

}
class Test extends Demo6{
    Test(int n , int t){
        super(n , t);//必须写在第一行
    }
}


这里类似于单类中有参构造方法和无参构造方法的区别联系。可参考我另一篇文章
java构造方法的一些注意事项(构造器))。
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值