例如,假设我有 3 个类 Person、Student 和 Teacher。 Person 类将包含有关 Student 和 Teacher 类将扩展的人员的一般详细信息(姓名、年龄、电子邮件等)。除此之外,这些类(class)还将有自己独特的字段(例如,教师的工资和授课类(class)(或“tought”?),学生的学年和类(class)编号)。如果我只显示我得到的初始代码,也许有人可以指出我正确的方向。因为 Person 没有 courseTaught 字段,所以目前我只得到输出“Josh (null)”而不是“Josh (Computer Science)”。任何帮助将不胜感激:)
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);
}
}
最佳答案
问题比你想象的要简单。您的方向是正确的,但您忘记在 Teacher
构造函数中分配 courseTaught
。 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”的一些信息。
关于Java:向子类构造函数添加字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27115986/