Java:向子类构造函数添加字段?

时间:2014-11-24 23:15:29

标签: java oop inheritance constructor

例如,假设我有3个人,学生和教师。 Person类将包含学生和教师课程将扩展的人员(姓名,年龄,电子邮件等)的一般详细信息。除此之外,这些课程还将拥有自己独特的领域(例如,为教师和学校提供工资和课程教学(或“tought”?)和学生的年级和班级数)。如果我只显示我得到的初始代码,也许有人可以指出我正确的方向。因为Person没有courseTaught字段,目前我只是输出“Josh(null)”而不是“Josh(计算机科学)”。任何帮助将不胜感激:)

public class Main {
    public static void main(String args[]){
        Teacher t = new Teacher("Josh", "Computer Science");
        System.out.println(t.name + " (" + t.courseTaught + ")");
    }
}

public class Person {

    String name;

    public Person(String pName){
        name = pName;
    }
}

public class Teacher extends Person{

    String courseTaught;

    public Teacher(String tName, String tCourseTaught){
        super(tName);
    }
}

1 个答案:

答案 0 :(得分:2)

问题比你想象的要简单。您已走上正轨,但忘记在courseTaught构造函数中指定TeachercourseTaught的初始值为null并保持这种状态,因为您从未将其分配给任何内容。

你想要这样的东西:

public Teacher(String tName, String tCourseTaught){
    super(tName);  // <- takes care of Persons's field
    courseTaught = tCourseTaught; // <- but don't forget to set the new field, too.
}

是的,"taught"是正确的词。

顺便说一句,由于您确实标记了您的问题&#34; oop&#34;,您可能需要查看this article on encapsulation以获取有关使用&#34; getters&#34;的一些信息。和#34; setters&#34;。