【发布时间】:2016-02-27 01:09:42
【问题描述】:
我正在为班级做一个抽象的超类练习,但我不知道为什么我的 getter 返回 null。根据我的导师的演示,setter 在子类中被覆盖,getter 将成为超类中的 final 方法。当我将吸气剂移到子类时,吸气剂会起作用,所以我猜测这与它们在不同的类中的事实有关,但由于我是面向对象编程的新手,我不知道这是否是原因和/或如何纠正这一点。
抽象超类:
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;
}
我如何尝试在我的主要工作中使用它:
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());
【问题讨论】:
-
为什么要复制类变量?你创建"shadowing" 效果。
-
构造函数在哪里?您没有启动超类属性(也没有启动子类属性)。尝试去做,问题就解决了。
-
我也想知道重复变量,但是这是我老师在课堂上演示的确切代码,所以.....
-
至于构造函数,我确实有,但值仍然为空,所以我删除了它们。
标签: java abstract-class getter-setter