【问题标题】:Adding in String and int to parent class with super.toString使用 super.toString 将 String 和 int 添加到父类
【发布时间】:2012-11-30 16:13:02
【问题描述】:

好的,我的程序有 4 个不同的类,我正在尝试在我的一个子类中添加一个新变量。我将展示所有涉及的类的代码,然后解释到底是什么错误。

第一个代码是我的 Person 类:

class Person {
private String myName; // name of the person
private int myAge; // person's age
private String myGender; // 'M' for male, 'F' for female

// constructor
public Person(String name, int age, String gender) {
    myName = name;
    myAge = age;
    myGender = gender;
}

public String getName() {
    return myName;
}

public int getAge() {
    return myAge;
}

public String getGender() {
    return myGender;
}

public void setName(String name) {
    myName = name;
}

public void setAge(int age) {
    myAge = age;
}

public void setGender(String gender) {
    myGender = gender;
}

public String toString() {
    return myName + ", age: " + myAge + ", gender: " + myGender;
}

}

我的下一堂课是我的教师课:

public class Teacher extends Person {
private static int salary;
private static String subject;

public Teacher(String name, int age, String gender, String subject, int salary) {
    super(name, age, gender);
    //Constructor
    salary = salary;
    subject = subject;
    public String toString(){


    return super.toString() +", Subject: " + subject + " Salary: " + salary;
}
}

}

所以我的程序的问题是,我正在尝试添加字符串主题和 Int Salary。我收到一个错误,一直说“令牌“字符串”上的语法错误,@预期”(教师课程的第 12 行),然后旁边的另一个错误说:“”语法错误,插入“EnumBody”以完成BlockStatement”(教师类第 12 行)。

所以我要做的就是将新值添加到我的父类中,这样当我添加用户时,我可以输入他们的薪水和主题等等。对不起,如果我不太清楚。对你们中的一些人来说,这可能是显而易见的,如果我不够清楚,请告诉我。

非常感谢任何帮助!

谢谢, 苏利

【问题讨论】:

  • 请缩进您的代码。目前很难阅读。此外,您已经提供了 很多 代码,而我怀疑您可以用几行代码展示一个完整的示例...
  • 对不起。格式弄乱了我的代码:/我不太确定如何解决这个问题,我会尽量提供尽可能少的代码。
  • 为什么薪水和科目是静态的?
  • 将你的 toString 移出构造函数。公共教师(字符串名称,整数年龄,字符串性别,字符串主题,整数工资){超(姓名,年龄,性别); //构造函数salary=salary;主题=主题; } public String toString(){ return super.toString() +", 主题:" + 主题 +" 薪水:" + 薪水; }

标签: java string class super


【解决方案1】:

一个问题是:

public Teacher(String name, int age, String gender, String subject, int salary) {
    super(name, age, gender);
    //Constructor
    salary = salary;
    subject = subject;
    public String toString(){


    return super.toString() +", Subject: " + subject + " Salary: " + salary;
}
}

您的 toString() 方法在构造函数中。将它移到构造函数之外。

public Teacher(String name, int age, String gender, String subject, int salary) {
        super(name, age, gender);
        //Constructor
        salary = salary;
        subject = subject;
    }

   public String toString(){
       return super.toString() +", Subject: " + subject + " Salary: " + salary;
    }

【讨论】:

    【解决方案2】:

    我没有仔细查看您的代码,但我相信这是问题所在:

    public Teacher(String name, int age, String gender, String subject, int salary) {
        super(name, age, gender);
        //Constructor
        salary = salary;
        subject = subject;
        public String toString(){
    
        return super.toString() +", Subject: " + subject + " Salary: " + salary;
    }
    

    您已经开始在构造函数的中间覆盖toString。需要关闭构造函数,然后启动toString方法:

    public Teacher(String name, int age, String gender, String subject, int salary) {
        super(name, age, gender);
        //Constructor
        salary = salary;
        subject = subject;
    }
    
    public String toString() {    
        return super.toString() + ", Subject: " + subject + " Salary: " + salary;
    }
    

    理想情况下,使用@Override 注释告诉编译器验证您是否真的也覆盖了超类方法:

    @Override
    public String toString() {    
        return super.toString() + ", Subject: " + subject + " Salary: " + salary;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 2018-01-12
      • 2022-07-21
      相关资源
      最近更新 更多