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

标签 java oop inheritance constructor

例如,假设我有 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 构造函数中分配 courseTaughtcourseTaught 的初始值为 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/

相关文章:

java - Intellij IDEA无法生成Pitest报告

java - 如何检查 boolean 数组中是否有任何 true 实例,然后从相应的数组中打印这些实例?

Java 使用对象和构造函数

Django 模板 - 我可以设置要在父模板中使用的变量吗?

java - 如何解析传入流,其中一个部分决定另一个部分在 Java 中的解释?

java - Java 中的单引号是怎么回事?

java - 为什么一个对象应该有一个返回 "this"的方法?

c# - 如何向域对象的构造函数提供 RequestContext 数据?

java - 父类(super class)引用访问说明

java - 将 Maven 输出发送到 Eclipse 中的文件