JAVA子类构造方法的三大定律(初学者注意)
前几天在做一个实现构造方法及继承的小练习,然后写了以下的一个子类Hund,却偏偏老是编译出错(其中AufBildschirmAusgebbar 是个自定义接口,而Tier是父类,两者已编译,没有问题):interface AufBildschirmAusgebbar{
void aufBildschirmAusgeben();
}
public class Tier implements AufBildschirmAusgebbar {
int anzahlderfuesse;
String name;
Tier(int fuss,String zeichen){
this.anzahlderfuesse=fuss;
this.name= zeichen;
}
public void aufBildschirmAusgeben(){
System.out.println("Tier "+this.name+ " hat " + this.anzahlderfuesse +" Fuesse .");
}
}
class Hund extends Tier implements AufBildschirmAusgebbar {
int knochen;
public void aufBildschirmAusgeben() {
System.out.println("Ein Hund hat "+this.knochen+" Knochen pro Wocho.");
}
public Hund (int zahl) {
this.knochen = zahl;
}
}
我研究了半天,错在哪里呢?后来找到了相关资料,才发现了java对于构造方法的继承有以下三大定律:
1.在子类的构造方法中可使用super(argument_list)语句调用父类的构造方法,必须写在第一行.
2.如果子类的构造方法中没有显示地调用父类构造方法,也没有使用this关键字调用重载的其它构造方法,则系统默认调用父类无参数的构造方法
3.如果子类构造方法中既未显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错
这下大家明白了吧,倒霉就倒霉在我在父类Tier里面什么都有,就是没有定义无参数的构造方法,而且还定义了一个有参的构造方法.现在我就必须调用这个东东了,于是,将hund的构造方法改成
public Hund (String Name,int zahl) {
super(4,Name);
this.knochen = zahl;
}
得,这下大功告成了,嘿嘿. 呵呵,错误百出 :D
页:
[1]