有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

创建类时是否调用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) 个答案