daxia108 发表于 2003-7-1 21:47

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;
}

   得,这下大功告成了,嘿嘿.

xxdragen 发表于 2003-7-1 23:15

呵呵,错误百出

binger4229 发表于 2008-7-18 00:33

:D
页: [1]
查看完整版本: JAVA子类构造方法的三大定律(初学者注意)