创建类时是否调用Java构造函数?未创建对象时出现“构造函数无法应用于给定类型”错误
我将根据教程重建以下代码。当我运行它时,我得到以下错误:
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有一个需要字符串参数的构造函数,而没有一个构造函数不需要参数。我不明白的是,为什么我没有创建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{
};
在其中,我创建了一个Hund对象,似乎使用了我在Vierbeiner类中定义的无参数构造函数
但如果我取消注释以下内容(案例2),我会得到一个编译错误:
Hund hund3 = new Hund("doggy");
在案例1中,编译器查找父类Vierbeiner以找到一个无参数构造函数来创建hund2对象。在案例2中,我希望编译器也能做同样的事情,那就是去父类Vierbeiner找到一个字符串参数构造函数来创建hund3对象,但如果不使用“super”,情况似乎就不一样了,我不明白为什么
共 (0) 个答案