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.for 调用超类构造函数的语法

  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 回答