0

Person という抽象クラスと、Employee という Person を拡張するサブクラスがあります。コンパイルしようとすると、コンストラクタエラーが発生します。コンストラクターを Employee クラスに記述してコンパイルするにはどうすればよいですか? この問題についてさらに情報が必要な場合はお知らせください。ありがとうございました。

public abstract class Person {    //Person abstract class
   public String firstName;
   public String lastName;
   public char gender;

   public Person(String fname, String lname, char g) { //constructor
      firstName = fname;
      lastName = lname;
      gender = g;
   }
   public abstract void setDefaults();
}

public class Employee extends Person {   //Employee class that extends Person

   public Employee() {    //i thought super(); might solve the problem, but it didnt.
      super();
   }
   public void setDefaults() {}
}
4

4 に答える 4

4

super()宣言にパラメーターを渡すのを忘れました。抽象コンストラクターにはパラメーターが必要です。のパラメーターはsuper()、親コンストラクターと同じである必要があります。パラメーターなしで使用できる唯一の方法はsuper()、親コンストラクターにパラメーターがまったくない場合です。

public abstract class Person {    //Person abstract class
   public String firstName;
   public String lastName;
   public char gender;

   public Person(String fname, String lname, char g) { //constructor
      firstName = fname;
      lastName = lname;
      gender = g;
   }
   public abstract void setDefaults();
}

public class Employee extends Person {   //Employee class that extends Person

   public Employee(String fname, String lname, char g) {    //i thought super(); might solve the problem, but it didnt.
      super(fname, lname, g);
   }
   public void setDefaults() {}
}
于 2013-04-27T03:56:58.523 に答える
1

これです

public Employee(String fname, String lname, char g) {
    super(fname, lname, g);
...
于 2013-04-27T03:56:20.540 に答える
1

これsuper();は、Person で独自のコンストラクターを定義したため、パラメーターなしで使用できなくなったためです。

スーパークラス Person で作成したコンストラクターと同じパラメーターを受け入れて渡すように Employee のコンストラクター定義を修正することで、これを修正できます。

public Employee(String fname, String lname, char g) {
    super(fname, lname, g);
}
于 2013-04-27T03:57:03.623 に答える
1

スーパークラスのコンストラクターに相当する super() を呼び出しています。ただし、デフォルトの (引数なし) コンストラクターはありません。できるよ

super("John", "Doe", 'M');
于 2013-04-27T03:58:38.603 に答える