扩展类会产生错误:“默认构造函数未定义隐式超级构造函数Hund()。必须定义一个显式构造函数。”

时间:2018-11-13 15:59:48

标签: java class extend

我想扩展一个类,但是不起作用。

这是我的代码:

public class Hund {

    // Attribute
    private String name;
     private String color;
     private int age;

    // Konstruktoren:
    public Hund(String name, String color, int age) {
        this.name = name;
        this.color = color;
        this.age = age;}

    public void ausgeben() {
        System.out.println("The dog´s race is " + name);
        System.out.println("His/Her color is " + color);
        System.out.println("His/Her age is " + age + " years");
    }

    public void bellen() {
        System.out.println("Wuff Wuff");
    }

    public static void main(String[] args) {
        Hund GermanShepherd = new Hund("GermanShepherd", "Black", 4);

        GermanShepherd.ausgeben();
        GermanShepherd.bellen();
    }

}

我创建了一个新类,当我键入以下内容:

public class Dackel extends Hund {} 

我收到错误消息:“默认构造函数未定义隐式超级构造函数Hund()。必须定义一个显式构造函数。”

我在做什么错?

2 个答案:

答案 0 :(得分:1)

Dackel需要一个构造函数,如果您使用的是IDE,Eclipse会告诉您。

enter image description here

因此解决方案是:

public class Dackel extends Hund
{

    public Dackel(String name, String color, int age)
    {
        super(name, color, age);
    }

}

另一种解决方案是向Hund类添加一个空的构造函数。

另一个提示:我也是德国人,但实际上,我会坚持一种语言。不要将类命名为德语,而将字段命名为英语。这有点混乱。宁可保持一致。

答案 1 :(得分:0)

每个java类都有默认的构造函数。如果为类实现参数化构造函数,则默认构造函数将不可用。

这里的参数化构造函数是

 public Hund(String name, String color, int age) {
        this.name = name;
        this.color = color;
        this.age = age;}

当您使用Hund JVM扩展Dackel并期望调用超类Hund的构造函数时。