2012-03-15 7 views
3

は、私はエラーを取得するスーパークラス(人)&サブクラス(学生)サブクラスのコンストラクタ

public class Person{ 
private String name; 
private Date birthdate; 
//0-arg constructor 
public Person() { 
    birthdate = new Date("January", 1, 1000); 
    name = "unknown name"; 
} 
//2-arg constructor 
public Person(String newName, Date newBirthdate){ 
    this.name = newName; 
    this.birthdate = newBirthdate; 
} 

//Subclass 
public class Student extends Person{ 

    public Student(){ 
     super(name, birthdate) 
} 

を作成しました。 私が試した:

public Student(){ 
    super() 
} 

を私のコーステスターは、私はあなたがパラメータとして名前と誕生日を取る学生のコンストラクタを作成する必要がありますsuper(name, birthdate);

答えて

1

を使用する必要がありますと言います。

Studentが既にインスタンス化されていない限り、提供したサンプルは機能しません。

4

StudentニーズのためのあなたのデフォルトコンストラクタはPersonの2つの引数のコンストラクタを使用する場合は、このようなあなたのサブクラスを定義する必要があります:

public class Student extends Person{ 

    public Student() { 
     super("unknown name", "new Date("January", 1, 1000)); 
    } 

    public Student(String name, Date birthdate) { 
     super(name, birthdate); 
    } 
} 

も注意Person.namePerson.birthdateはサブクラスで表示されないこと彼らはprivateと宣言されているからです。

+0

私はすでに2つのパラメータコンストラクタを持っています。 0パラムコンストラクタでスーパー(名前、生年月日)を使用する必要があります – user1200325

+0

@ user1200325 - 私は私の答えを改訂しました –

0

何らかの形で生徒の名前と生年月日のパラメータを取得する必要があります。どのようにして:あなたも行うことができます

public Student(String name, Date birthdate){ 
    super(name, birthdate) 
} 

:ここではいくつかの誤解があるよう

public Student(){ 
    super("unknown name", new Date("January", 1, 1000)); 
} 
+0

@Jochen - コピー貼り付け - すべての悪の根源:) – MByD

+0

私はすでに2つのパラメータを持っていますコンストラクタ。 事は私は0のparamコンストラクタでスーパー(名前、生年月日)を使用する必要があります – user1200325

+0

編集を参照してください。 – MByD

1

が見える:

あなたがStudentを作成し、別のPersonありませんobject-- StudentのすべてのプロパティがPersonのものだけです。

コンストラクタは何ですか?は生徒のためです。そのため、コンストラクタの内部には参照可能な他のStudent/Personはありません。 superを呼び出すと、オブジェクトのPerson部分が初期化され、Personのフィールドにアクセスできますが、新しいオブジェクトであるため、コンストラクタでそれを行わない限り、何も設定できません。

あなたのオプションは、のいずれかです:Personに設定するよう

1)デフォルトを使用します。

public Student() { 
    super(); // this line can be omitted as it's done by default 
} 

2)のパラメータとして値を取るとPersonコンストラクタに渡す:

public Student(String newName, Date newBirthdate) { 
    super(newName, newBirthdate); 
} 

3)新しいデフォルトを指定してください:

public Student() { 
    super("Bob", new Date("January", 1, 1990)); 
} 
関連する問題