例如,假设我有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
构造函数中分配Teacher
。 courseTaught
的初始值为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”的一些信息。