Я работаю над абстрактным упражнением суперкласса для класса, и я застрял в том, почему мои геттеры возвращают ноль. Согласно тому, как продемонстрировал мой инструктор, сеттеры переопределяются в подклассах, а геттеры должны быть окончательными методами в суперклассе. Геттеры работают, когда я перемещаю их в подкласс, поэтому я предполагаю, что это как-то связано с тем, что они находятся в отдельных классах, но, поскольку я новичок в объектно-ориентированном программировании, я понятия не имею, почему это так и/или как это исправить.
Абстрактный суперкласс:
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());