gpt4 book ai didi

Java-Getters 返回 Null

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:41:59 25 4
gpt4 key购买 nike

我正在为类进行抽象父类(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com