继承中子类帮助父类写构造方法的理解

在Java中,子类对象的构造过程包括对基类继承下来的成员和子类自身新增成员的初始化。创建子类对象时,首先会调用基类的构造方法,然后是子类的构造方法。如果基类有无参构造,子类可以直接使用`super()`调用;如果有参构造,子类需通过`super(参数)`指定。即使不显式调用,编译器也会自动添加`super()`。
摘要由CSDN通过智能技术生成

子类对象中成员是有两部分组成的,基类继承下来的以及子类新增加的部分 。父子父子肯定是先有父再有子,所以在构造子类对象时候 ,先要调用基类的构造方法,将从基类继承下来的成员构造完整,然后再调用子类自己的构造方法,将子类自己新增加的成员初始化完整。

情况1

class Animal{
    public String name;
    public int age;
    public Animal(){
         //父类无参的构造方法

    }
    // 在继承关系上,当我们构造子类的时候,一定要帮助父类进行构造:
    public Animal(String name, int age) {    
        // 父类有参构造方法
        this.name = name;
        this.age = age;
        System.out.println("带有2个参数的构造方法");
    }
}

此时子类的 代码应该如何写?

class Dog extends Animal{
    public Dog(){
        // 调用父类中无参的构造方法
        super();
    }
    public Dog(String name, int age){
        // 调用父类中有参的构造方法
        // 2.帮助父类成员进行初始化,一定调用构造方法。
        super(name, age);
    }
    public void wangwang(){
        System.out.println("汪汪叫");
    }
}

不会报错,第一个调用父类中无参的构造方法,第二个调用父类中有参的构造方法


这样也不不会报错,都调用的是父类无参的构造方法,系统会默认在子类中加上super()

class Dog extends Animal{
    public Dog(){
        // 调用父类中无参的构造方法
    }
    public Dog(String name, int age){
        // 调用父类中无参的构造方法
    }
    public void wangwang(){
        System.out.println("汪汪叫");
    }
}

情况2

class Animal{
    public String name;
    public int age;
    // 在继承关系上,当我们构造子类的时候,一定要帮助父类进行构造:
    public Animal(String name, int age) {    
        // 父类有参构造方法
        this.name = name;
        this.age = age;
        System.out.println("带有2个参数的构造方法");
    }
}

此时父类没有显示无参的构造方法,那么子类如何写构造方法呢?

class Dog extends Animal{
    public Dog(){
        // 调用父类中无参的构造方法
        super("小白", 10);
    }
}
class Dog extends Animal{
    public Dog(String name, int age){
        // 调用父类中有参的构造方法
        // 2.帮助父类成员进行初始化,一定调用构造方法。
        super(name, age);
    }
}

都是正确的,都调用的是父类有参的构造方法!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈士奇的奥利奥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值