OOP:继承与扩展

时间:2015-03-18 10:58:21

标签: java inheritance

有人能告诉我为什么这段代码不正确吗?

public class Boss extends Angestellter {

    Boss(String v, String n, int a) { // ERROR **
        vorname = großKleinSchreibung(v); 
        nachname = großKleinSchreibung(n);
        alter = a;

    }
}

**隐式超级构造函数Angestellter()未定义。必须显式调用另一个构造函数

public class Angestellter {

    protected String vorname;
    protected String nachname;
    public int alter;

    Angestellter(String v, String n, int a) {

        this.vorname = großKleinSchreibung(v);
        this.nachname = großKleinSchreibung(n);
        this.alter = a;

    }

我没有找到错误,因为它正是如何在书中解释我使用java学习oop。

2 个答案:

答案 0 :(得分:4)

您应该显式地调用基类的构造函数,因为如果您不这样做,编译器会添加对基类的无参数构造函数的隐式调用,这在您的情况下不存在。< / p>

public class Boss extends Angestellter {
    Boss(String v, String n, int a) { 
        super (v,n,a);
        vorname = großKleinSchreibung(v); 
        nachname = großKleinSchreibung(n);
        alter = a;
    }
}

答案 1 :(得分:0)

简单来说就是

  

无法覆盖JAVA中超类的构造函数

这是你的小修改代码!!

public class Angestellter {

    protected String vorname;
    protected String nachname;
    public int alter;

    Angestellter(String v, String n, int a) {

        this.vorname = großKleinSchreibung(v);
        this.nachname = großKleinSchreibung(n);
        this.alter = a;

    }
...
}

public class Boss extends Angestellter {

    ... Other methods
}

// In main 

Angestellter myObj = new Boss("asd","as",1); // It will call constructor itself ... because it is inherited !!