Java 子类构造方法调用父类的构造方法

在构造子类时。子类创建完,即拥有父类的属性,所以在构造子类之前一定会构造父类。
其实子类的所有构造方法的第一行都有一条隐示super()或者显示的super()

  • 隐示super()
    先说一下什么情况下会有隐示的super()。
    1.子类构造函数中没写super()并且子父类具有无参构造函数。那么子类第一行便会自动一条隐身的语句super
    父类代码:具有无参构造函数
public class Fruit {
    private String name;

    public Fruit() {

    }

    public Fruit(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

子类代码:可以看到子类的两个构造函数都没有显示的写super(),那么在构造子类的时候就会自动产生super(),并且执行父类的无参构造函数

public class Apple extends Fruit {

    boolean isRed;

    public Apple() {
    }

    public Apple(boolean isRed) {
        this.isRed = isRed;
    }

    public boolean isRed() {
        return isRed;
    }

    public void setRed(boolean red) {
        isRed = red;
    }
}

如果父类没有无参构造函数,那么不能自动生成super(),编译会报错:There is no default constructor available in xxxx

  • 显示的super()
    如果父类没有无参构造函数,或者需要调用父类的有参构造函数就需要显示的调用super();
    父类:没有无参构造函数
public class Fruit {
    private String name;

    public Fruit(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

子类:显示调用父类的构造函数,并且传入参数

public class Apple extends Fruit {

    boolean isRed;

    public Apple(boolean isRed,String name) {
        super(name);
        this.isRed = isRed;
    }

    public boolean isRed() {
        return isRed;
    }

    public void setRed(boolean red) {
        isRed = red;
    }
}
  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值