gpt4 book ai didi

java - 创建类时是否调用 Java 构造函数?没有创建对象时出现 "constructor cannot be applied to given types"错误

转载 作者:行者123 更新时间:2023-12-01 07:18:08 24 4
gpt4 key购买 nike

我正在根据教程重建以下代码。当我运行编译它时,我收到以下错误:

constructor Vierbeiner in class Vierbeiner cannot be applied to given types; required: java.lang.String found: no arguments reason: actual and formal argument lists differ in length

我的理解是,出现这个错误是因为父类Vierbeiner有一个需要String参数的构造函数,而没有不需要参数的构造函数。我不明白的是为什么我在没有创建 Hund 类的对象的情况下收到此错误。当我没有创建 Hund 类的对象时,为什么会调用构造函数?我见过的关于此错误的每个现有问题都涉及创建子类的对象。

public class Vierbeiner {

public static void main(String[] args){
Vierbeiner hund = new Vierbeiner("Bello");
hund.rennen();
}

String vierbeinerName;

Vierbeiner(String pName) {
vierbeinerName = pName;
}

public void rennen() {
System.out.println(vierbeinerName+" rennt los!");
}

}

class Hund extends Vierbeiner {
}

编辑:针对我得到的答案,我仍然不清楚为什么以下(情况 1)编译没有问题:

public class Vierbeiner{
public static void main(String[] args){

Vierbeiner hund = new Vierbeiner();
Hund hund2 = new Hund();
// Hund hund3 = new Hund("doggy");
}

String vierbeinerName;

Vierbeiner() {
vierbeinerName = "test";
};

Vierbeiner(String pName){

}

}

class Hund extends Vierbeiner{

};

其中我似乎使用我在 Vierbeiner 类中定义的无参数构造函数创建了一个 Hund 对象。

但是如果我取消注释以下内容(情况 2),则会出现编译错误:

Hund hund3 = new Hund("doggy");

在情况 1 中,编译器会在父类 Vierbeiner 中查找无参数构造函数来创建 hund2 对象。在情况 2 中,我希望编译器做同样的事情,即转到父类 Vierbeiner 查找字符串参数构造函数来创建 hund3 对象,但如果不使用“super”和,情况似乎并非如此我不明白为什么。

最佳答案

您在编译期间收到错误,而不是在运行时收到错误或异常。

这意味着代码没有被执行,因此没有创建类实例 - 没有调用任何构造函数。

在编译期间,很容易检测到您正在扩展一个具有单个字符串参数构造函数的类,扩展类必须调用该构造函数(以便创建底层基类)。

请注意,一旦实现了构造函数,you can no longer rely upon the autogenerated no-parameter default constructor基类的参数化构造函数 - 您现在必须在派生类中调用基类的参数化构造函数。

由于您的代码中缺少这种实现 - 就会发生您所描述的错误。

一个简单的可能解决方案是提供一个默认构造函数实现,它将调用基类的单参数构造函数:

class Hund extends Vierbeiner{
Hund() {
super("DefaultName");
}

};

代码中的这一添加解决了编译时间错误。

更实用的方法是确保派生类也有一个带有字符串参数的构造函数,然后可以将其传递给基类构造函数:

class Hund extends Vierbeiner{
Hund(String name) {
super(name);
}

};

引用文献:

关于java - 创建类时是否调用 Java 构造函数?没有创建对象时出现 "constructor cannot be applied to given types"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50780163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com