1. ホーム
  2. java

[解決済み] クラス内のJavaコンストラクタは、指定された型に適用できません。

2022-02-18 01:40:51

質問

2つのサブクラスがあります。Staff、Student これらはスーパークラスPersonに属しています。

以下は、先生から渡されたコード(タスク)です。


public class Person
{

   private String name;
   private int yearOfBirth;

   /**
    * Create a person with given name and age.
    */
   Person(String name, int yearOfBirth)
   {
      this.name = name;
      this.yearOfBirth = yearOfBirth;
   }
}


class Student extends Person
{

   private String SID;    // student ID number

   /**
    * Create a student with no parameters.
    */

   Student()
   {
    //task.
   }
}


public class Staff extends Person
{

   private String roomNumber;

   /**
    * Construct a staff member with field values and no pamaeters.
    */
   public Staff()
   {
    //task 
   }
}

パラメータなしでオブジェクトを作成するために、何を入力すればよいのかわかりません。 PersonクラスのコンストラクタPersonは、与えられた型には適用できません; 必須: java.lang.String,int;

ネットで調べたところ、2つの解決方法があるようです。

  1. スーパークラスにデフォルト値を追加する。 Person()//without parameter .

    サブクラスのStudentで

Student()
  {
  Person astudent = new Student() //I guess.
  }

  1. サブクラスにsuper()を追加する。
Student()
 {
  super("xxx")//I guess.
 }

どうしたらいいのかわからない。私はBlueJを学ぶためのスターターです。 誰かが私を助けることができることを願っています。どうもありがとうございました。

どのように解決するのですか?

スーパークラス Person はデフォルトのコンストラクタを持たないので、サブクラス ( StudentStaff ) の場合、最初のステートメントとして、スーパークラスのコンストラクタを呼び出す必要があります。

サブクラスのコンストラクタはこのように定義する必要があります。

Student() {
    super("a_string_value", an_int_value);// You have to pass String and int values to super class
}


Staff() {
    super("a_string_value", an_int_value); // You have to pass String and int values to super class
}