例如,假设我有3个班级:人,学生和老师。 Person类将包含有关Student和Teacher类的人员的一般详细信息(姓名,年龄,电子邮件等)。不过,最重要的是,这些课程也将有各自独特的字段(例如,教师和SchoolYear的薪资和课程授课(或“教过”?)和学生的班级编号)。如果我只显示我得到的初始代码,也许有人可以指出正确的方向。由于Person没有CourseTaught字段,因此我现在只获得输出“ Josh(空)”而不是“ 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);
    }
}

最佳答案

这个问题比您想象的要简单。您处在正确的轨道上,但您忘记在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"是正确的词。

顺便说一句,由于您确实将问题标记为“ oop”,因此您可能想查看this article on encapsulation以获取有关使用“ getters”和“ setters”的一些信息。

09-10 06:42