1

私は学生を拡張する学部クラスを書こうとしています

これが基本クラスです(学生)

public class Student{

    private String name;
    private int id;
    private double gpa;

    public Student(){

    }

    public Student(int id, String name, double gpa){
        this.id = id;
        this.name = name;
        this.gpa = gpa;
    }

    public Student(int id, double gpa){
        this(id, "", gpa);
    }

    public String getName(){
        return name;
    }

    public int getId(){
        return id;
    }

    public double getGPA(){
        return gpa;
    }

    public void setName(String newName){
        this.name = newName;
    }

    @Override
    public String toString(){
        return "Student:\nID: " + id + "\nName: " + name + "\nGPA: " + gpa;
    }
}

そしてここで派生クラス(学部生)

public class Undergrad extends Student {

    private String year;

    public Undergrad (int id , String name ,double gpa,String year)
    {
        super(id,name , gpa);
        this.year =year;

    }

    @Override
    public String toString(){
        return super() + " the year is :" + year;
    }
}

私が直面している問題は、Eclipseが、クラスUndergradのtoStringメソッドに間違いがあること を示し いることです

「トークン「super」の構文エラー、無効な名前」

助けてください。

4

3 に答える 3

4

super()呼び出しはコンストラクターでのみ許可されます。スーパークラスメソッドを呼び出したい場合は
、呼び出す必要があります。super.toString()

public String toString()
{
      return super.toString() + " the year is :" + year;
 }  

これはsuperキーワード1 の構文です
。スーパークラス コンストラクターを呼び出す場合は次のとおりです。

  1. 素晴らしい(); //スーパークラスの引数なしコンストラクタが呼び出されます
  2. super(parameter list);//一致するパラメーター リストを持つスーパークラス コンストラクターが呼び出されます

2.スーパークラスメンバーの呼び出しは

  1. super.fieldName;//ここのメンバーはスーパークラスのフィールドです
  2. super.methodName();//ここのメンバーはスーパークラスのメソッド
于 2013-09-17T18:16:34.283 に答える
2

スーパークラス メソッドを呼び出すときは、次の構文を使用しますsuper.methodName()

{return super.toString() + " the year is :" + year;}

これは、サブクラス コンストラクター内からスーパークラス コンストラクターを呼び出すこととは異なります。superその構文には、すでにあるので、ドットもメソッド名もないキーワードだけが必要です。

于 2013-09-17T18:15:26.257 に答える
0

super.toString()スーパークラスメソッドを呼び出します。

super()スーパークラスのコンストラクターを呼び出します。

于 2013-09-17T18:18:19.647 に答える