例如,假设我有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);
}
}
答案 0 :(得分:2)
问题比你想象的要简单。您已走上正轨,但忘记在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"是正确的词。
顺便说一句,由于您确实标记了您的问题&#34; oop&#34;,您可能需要查看this article on encapsulation以获取有关使用&#34; getters&#34;的一些信息。和#34; setters&#34;。