我正在为类进行抽象父类(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
开始,您应该删除字段 credits
和 courseName
。这些可以从 ProgrammingCourse
访问。
现在您只有一个声明用于每个字段,您应该在 ProgrammingCourse
中将这些字段标记为 protected
或创建一些 getter/setter,以便您可以从 AdvancedJavaCourse
更改它们的值。
关于Java-Getters 返回 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35109145/