java 子类的构造函数都必须要super();吗?

java子类调用父类的构造函数-----super(),自我理解。

1.子类不能继承父类的构造函数,但是可以调用父类的构造函数

2.如果父类没有定义构造函数,系统会默认定义一个无参无返回值的构造函数,子类继承时无需在子类构造函数中==显式 == 调用super();
(即子类的构造函数中默认调用父类的无参构造函数,只不过第一行代码:super();一直被省略了)。

3.如果父类有有参构造函数,则子类必须在自己的构造函数中显示的调用父类的构造函数即super(参数名)。
如果父类的构造函数只有一个,且修饰符是private,则不可以被继承。

4.如果子类的某个构造函数想要调用父类的其他带参构造函数,在构造函数第一行添加super(args1,args2…);(参数的多少根据想调用父类构造函数的形参而定)

5.如果子类的构造函数在第一行super(args1,args2…);调用了父类的其他有参构造函数,那么子类的该构造函数不会再调用父类的默认构造函数

继承中的构造方法的执行顺序:父类有构造函数,子类也写构造方法的时候必须显示的调用父类的构造方法【子类在创建对象的时候,掉用构造方法的顺序是:

第一步:调用父类的构造方法

第二部:调用子类的构造方法】


public class Father {
public String name;
 
public Father(String name) {
this.name = name;
}
}
 
public class Son extends Father{
 
public Son(String name) {
super(name);//必须调用,否则他会默认调用父类的无参构造函数,而父类的无参构造函数已经被有参的覆盖,所以找不到
}
 
}
  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中的子类在继承父类时,如果父类中定义了带参数的构造函数,那么子类必须在自己的构造函数中显式地调用父类的构造函数,否则编译器会报错。这是因为,如果父类中定义了带参数的构造函数,那么Java编译器不会再为父类自动生成默认的无参构造函数,而是需要显式地调用父类的构造函数来完成父类的初始化工作。 子类调用父类的构造函数有两种方式: 1. 使用super关键字调用父类的构造函数,如下所示: ``` public class Parent { public Parent(String name) { // 构造函数的初始化代码 } } public class Child extends Parent { public Child(String name) { super(name); // 调用父类的构造函数 // 子类的其他初始化代码 } } ``` 2. 如果子类构造函数没有显式地调用父类的构造函数Java编译器会默认调用父类的无参构造函数。这时,如果父类没有定义无参构造函数,编译器就会报错。为避免这种情况,可以在父类中定义一个无参构造函数,如下所示: ``` public class Parent { public Parent() { // 无参构造函数的初始化代码 } public Parent(String name) { // 带参构造函数的初始化代码 } } public class Child extends Parent { public Child(String name) { // 子类的初始化代码 } } ``` 在这种情况下,如果子类构造函数没有显式地调用父类的构造函数,编译器就会默认调用父类的无参构造函数,从而避免编译错误。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值