Java-Getters 返回 Null

标签 java abstract-class getter-setter

我正在为类进行抽象父类(super class)练习,但我对为什么我的 getter 返回 null 感到困惑。根据我的导师的演示,子类中的 setter 被重写,而 getter 将成为父类(super class)中的 final方法。当我将 setter/getter 移至子类时 setter/getter 起作用,所以我猜这与它们位于不同的类中这一事实有关,但由于我是面向对象编程的新手,我不知道这是否就是原因和/或如何着手纠正这个问题。

抽象父类(super class):

public abstract class ProgrammingCourse {

    private double credits;
    private  String courseName;

    public final double getCredits() {
        return credits;
    }

    public abstract void setCredits(double credits);

    public final String getCourseName() {
        return courseName;
    }

    public abstract void setCourseName(String courseName);

示例子类:

  public class AdvancedJavaCourse extends ProgrammingCourse {

    private double credits;
    private String courseName;

    @Override
    public void setCourseName(String courseName) {
        if (courseName == null || courseName.length() == 0) {
            JOptionPane.showMessageDialog(null,
                    "Error: courseName cannot be null or empty");
            System.exit(0);
        }
        this.courseName = courseName;
    }

    @Override
    public void setCredits(double credits) {
        this.credits = credits;
    }

我是如何尝试在我的 main 中使用它的:

     ProgrammingCourse[] courses = {new AdvancedJavaCourse(), 
     new IntroJavaCourse(), new IntroToProgrammingCourse()};

    courses[0].setCourseName("adv Java");
    courses[1].setCourseName("Intro Java");
    courses[2].setCourseName("Intro Programming");
    for (ProgrammingCourse pc : courses) {
        System.out.println(pc.getCourseName());
    }

    AdvancedJavaCourse advJava = new AdvancedJavaCourse();
    advJava.setCourseName("Advanced Java");

    System.out.println(advJava.getCourseName());

最佳答案

您的代码存在一些问题。从 AdvancedJavaCourse 开始,您应该删除字段 creditscourseName。这些可以从 ProgrammingCourse 访问。

现在您只有一个声明用于每个字段,您应该在 ProgrammingCourse 中将这些字段标记为 protected 或创建一些 getter/setter,以便您可以从 AdvancedJavaCourse 更改它们的值。

关于Java-Getters 返回 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35109145/

相关文章:

java - 常规更改日历日期

Java线程题——监听n个错误流

php - PDO 数据库抽象层,在一个请求中具有多个查询

java - 抽象类避免创建对象的多个实例来传递不同的输入

java - 如何为字段编写自定义注释,以便为该字段创建自定义 setter ?

Java自动获取和设置?

binding - 如何使用 GObject Introspection 和 vapigen 告诉 vala 使用哪些 getter 和 setter?

java - 在静态上下文中使用泛型类型

java - 如何将此mongodb聚合命令转换为java代码

java - 从数组列表中返回某个 'type'的对象