首页 > Java > java教程 > 为什么 Java 子类会出现'隐式超级构造函数未定义”错误,以及如何修复?

为什么 Java 子类会出现'隐式超级构造函数未定义”错误,以及如何修复?

DDD
发布: 2024-11-29 14:34:11
原创
942 人浏览过

Why Does a Java Subclass Get an

默认 Java 构造函数中的隐式超级构造函数错误

在 Java 中,编译器会自动为未显式定义的类提供默认构造函数任何构造函数。但是,当基类定义构造函数时,编译器将不再为其子类隐式生成默认构造函数。这可能会导致“默认构造函数未定义隐式超级构造函数”错误。

示例:

考虑以下代码:

abstract public class BaseClass {
    String someString;
    public BaseClass(String someString) {
        this.someString = someString;
    }
    abstract public String getName();
}

public class ACSubClass extends BaseClass {
    public ASubClass() { // default constructor
        // super(someString);  // error: super() must be invoked in subclasses
    }
    public String getName() {
        return "name value for ASubClass";
    }
}
登录后复制

这里,ACSubClass 没有显式构造函数。相反,它依赖于编译器提供的默认构造函数。但是,由于 BaseClass 定义了构造函数,因此 BaseClass 不存在默认构造函数。这会导致编译器错误,指出必须在子类中定义显式构造函数。

解决方案:

要解决此错误,必须提供显式构造函数在使用 super(parameters) 调用超级构造函数的子类中。或者,可以修改基类以提供默认构造函数。

// Option 1: Provide an explicit constructor in the subclass
public class ACSubClass extends BaseClass {
    public ASubClass(String someString) {
        super(someString);
    }
    public String getName() {
        return "name value for ASubClass";
    }
}

// Option 2: Modify the base class to have a default constructor
abstract public class BaseClass {
    String someString;

    public BaseClass() {}  // added default constructor

    public BaseClass(String someString) {
        this.someString = someString;
    }
    abstract public String getName();
}
登录后复制

以上是为什么 Java 子类会出现'隐式超级构造函数未定义”错误,以及如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板