我对继承是相当新的,我不确定我是否做得对,但我似乎走在了正确的轨道上。该程序运行正常,但我得到的输出不正确。我认为问题与我的构造函数有关。
public class Person {
protected static String name;
protected static int birthYear;
public Person(String name, int birthYear) {
}
public String name (String n) {
n = name;
return n;
}
public int birthYear (int bY) {
bY = birthYear;
return bY;
}
@Override
public String toString() {
return String.format(name + birthYear);
}
}
public class Student extends Person {
protected String major;
public Student(String name, int birthYear, String major) {
super(name, birthYear);
major = "";
}
public String major(String maj) {
maj = major;
return maj;
}
public String toString() {
super.toString();
return super.toString() + major;
}
}
public class Instructor extends Person {
protected static int salary;
public Instructor(String name, int birthYear, int salary) {
super(name, birthYear);
salary = 0;
}
public int salary(int sal) {
sal = salary;
return sal;
}
public String toString() {
super.toString();
return super.toString() + salary;
}
}
public class PersonTester {
public static void main(String[] args) {
Person p = new Person("Perry", 1959);
Student s = new Student("Sylvia", 1979, "Computer Science");
Instructor e = new Instructor("Edgar", 1969, 65000);
System.out.println(p);
System.out.println("Expected: Person[name=Perry,birthYear=1959]");
System.out.println(s);
System.out.println("Expected:" +
"Student[super=Person[name=Sylvia,birthYear=1979],major=Computer]");
System.out.println(e);
System.out.println("Expected:" + "Instructor[super=Person[name=Edgar,birthYear=1969],salary=65000.0]");
}
}
输出我的消息:
null0
Expected: Person[name=Perry,birthYear=1959]
null0null
Expected: Student[super=Person[name=Sylvia,birthYear=1979],major=Computer Science]
null00
Expected: Instructor[super=Person[name=Edgar,birthYear=1969],salary=65000.0]
答案 0 :(得分:0)
尝试将Person
中的构造函数更改为:
public Person(String name, int birthYear) {
this.name = name;
this.birthYear = birthYear;
}
目前,构造函数有一个空体,所以当你在子类构造函数中调用super(name, birthYear);
时,实际上什么也没发生。
您的Student
构造函数也有错误。您忘记初始化major
字段。
public Student(String name, int birthYear, String major) {
super(name, birthYear);
this.major = major;
}
Instructor
构造函数中存在同样的问题...
public Instructor(String name, int birthYear, int salary) {
super(name, birthYear);
this.salary = salary;
}
最后,您需要在static
中的字段前删除Person
个关键字。这是因为static
确保每个类每个字段总会有一个(且只有一个)实例,而不是每个实例一个,例如你希望它是:
protected String name;
protected int birthYear;
salary
中的Instructor
字段也是如此。
答案 1 :(得分:-1)
n = name;
这会导致您的问题。它必须是name = n;
。你的所有setter函数都包含这个问题,纠正它们并告诉我结果。