构造函数+继承支持

时间:2015-03-09 05:25:09

标签: java inheritance constructor

我对继承是相当新的,我不确定我是否做得对,但我似乎走在了正确的轨道上。该程序运行正常,但我得到的输出不正确。我认为问题与我的构造函数有关。

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]

2 个答案:

答案 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函数都包含这个问题,纠正它们并告诉我结果。