java:继承中子类和父类构造器的相关内容

在Java中,当父类的无参构造器被有参数的构造器覆盖时,子类创建对象时需在构造器中通过`super(参数)`指定调用父类的哪个构造器。否则,编译会出现错误。子类构造器执行前,总是先调用父类构造器,确保父类的初始化。若父类没有显式定义构造器,会有一个默认的无参构造器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.  首先, 子类必须调用父类的无参构造器,完成对父类的初始化
package com.hspedu.extend_;

public class Base { // 父类


    public Base(){  // 父类无参构造器
        System.out.println("父类无参构造器Base()被调用");
    }
}
package com.hspedu.extend_;

import com.hspedu.extend_.Base;

public class Sub extends Base {     //子类
    
    public Sub(){   // 子类无参构造器
        System.out.println("子类无参构造器Sub()被调用");
    }
}
运行后我们会发现,先调用了父类的无参构造器完成父类初始化,后才调用了子类的构造器

//  当子类对象创建时,不管使用子类的哪个构造器,默认情况下会先调用父类的无参构造器。
//  如果父类没有无参构造器,则必须在子类构造器中用super()去指定使用父类的哪个构造器去
//  完成对父类的初始化,否则编译无法通过
package com.hspedu.extend_;

public class Base { // 父类


//    public Base(){  // 父类无参构造器
//        System.out.println("父类无参构造器Base()被调用");
//    }

    public Base(int x){  // 父类中有参数的构造器,编写后会覆盖掉默认的无参构造器
        System.out.println("父类有参数的构造器Base(int x)被调用");
    }
}

然后我们将父类中的无参构造器屏蔽, 创建一个有参数的构造器,这时会覆盖掉其默认的无参构造器,当我们创建子类对象时,如果不加以说明,子类就无法调用默认的无参构造器从而编译错误。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值