【转载】子类调用父类构造器

本文详细解释了在Java中子类构造器调用父类构造器的问题,包括隐式添加无参构造器、显示调用父类构造器的方法及删除或注释父类构造器的替代方案,并通过实例代码演示了解决方法。

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

今天在做项目的时候,发现了子类与父类之间构造器的调用问题。代码如下:

SuperClass.java

package constructor;
public class SuperClass {
    public SuperClass(String name) {
        System.out.println("SuperClass" + name);
    }
} 

 

 SubClass.java

package constructor;
public class SubClass extends SuperClass{
    public SubClass() {
        System.out.println("no-argument SubClass" );
    }
}

	这样一来,在SubClass.java的构造器中就会报错。在子类构造器中,如果没有显式调用父类的构造器,那么编译器会就会自动隐式地给子类构造器添加父类的默认无参构造器(default no-argument constructor)。如果此时父类中已经定义好了无参构造器或者没有构造器,那么子类就不会出现问题。但是,如果父类定义了有参构造器(so编译器不会给父类隐式添加无参构造器),而在子类构造器中又没有显示的调用父类的定义的构造器,子类的构造器就会报错:Implicit super constructor SuperClass() is undefined for default constructor. Must define an explicit constructor。原因就是因为编译器没有找到它期望的那个父类构造器。所以,有三种方法解决这个问题:
1 在父类中显式定义一个无参构造器;
2 在子类构造器中,显式地调用父类带参构造器,即在子类构造器中的第一行写入super(String str)<必须是第一行,这和类的初始化顺序有关>;
3 注释掉或者删掉父类中的带参构造器,这种做法其实是这样的:当编译器发现一个类没有构造器时,就会隐式添加一个默认无参构造器。
 
原文地址:
http://blog.163.com/yu_chao2013/blog/static/23389316820145251040692/?newFollowBlog
点击打开链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值