В настоящее время я изучаю наследование в java. У меня есть суперкласс под названием «Студенты с подклассами» UndergradStudents & GraduateStudents. У обоих из них есть метод, называемый deansHonourList. В методе undergrad deansHonourList он проверяет, превышает ли GPA более 3,5 для списка деканов, а для подкласса выпускников gpa должен быть больше 3,75, я должен удалить методы в подклассах и создать один метод в суперклассе который определяет, соответствует ли студент для списка чести деканов. Вот мой код до сих пор.Упростить java-программу, используя наследование
import java.io.*;
public class Activity6C {
public static void main(String[] args) {
Student[] students = new Student[4];
students[0] = new UndergradStudent(8032, "Casper", 2.78, 2);
students[1] = new GraduateStudent(3044, "Sheena", 3.92, "Natural Language Processing");
students[2] = new UndergradStudent(6170, "Yolanda", 4.26, 3);
students[3] = new GraduateStudent(1755, "Geordi", 3.58, "Human-Computer Interaction");
printStudents(students);
printDeansList(students);
System.out.println("\nEnd of processing.");
}
public static void printStudents(Student[] students) {
System.out.println("\nList of all students:\n");
for (int i = 0; i < students.length; i++) {
System.out.println(i + 1 + ": " + students[i]);
}
}
public static void printDeansList(Student[] students) {
System.out.println("\nDean's honour list:\n");
for (int i = 0; i < students.length; i++) {
if (students[i].deansHonourList()) {
System.out.println(students[i]);
}
}
}
}
class Student {
private int number;
private String name;
private double gpa;
public Student(int number, String name, double gpa) {
this.number = number;
this.name = name;
this.gpa = gpa;
}
public double getGPA() {
return gpa;
}
public boolean deansHonourList() {
//Here is where i make my code to determine honour list students
return false;
}
public String toString() {
return number + " " + name + " (" + gpa + ")";
}
}
class UndergradStudent extends Student {
private int year;
public UndergradStudent(int number, String name, double gpa, int year) {
super(number, name, gpa);
this.year = year;
}
public boolean deansHonourList() {
boolean result = false;
if (getGPA() >= 3.5)
result = true;
return result;
}
public String toString() {
return "Undergraduate: " + super.toString() + " year: " + year;
}
}
class GraduateStudent extends Student {
private String thesis;
public GraduateStudent(int number, String name, double gpa, String thesis) {
super(number, name, gpa);
this.thesis = thesis;
}
public boolean deansHonourList() {
boolean result = false;
if (getGPA() >= 3.75)
result = true;
return result;
}
public String toString() {
return "Graduate: " + super.toString() + " thesis: " + thesis;
}
}
Примечание: Это упражнение, и это не стоит того, но я хотел бы дать подсказку в правильном направлении. Вот что задает этот вопрос.
Мне нужно заставить его работать без использования instanceof или getClass() и без добавления каких-либо инструкций if-else или переменных экземпляра. Не должно быть никакого метода deansHonourList() в GraduateStudent или UndergraduateStudent, и метод getGPA() может быть удален.
Подсказка, которую я получил, заключалась в том, чтобы добавить дополнительный класс к суперклассу и переопределить его в подклассах по мере необходимости; вызовите этот метод в вашем методе deansHonourList().
Я не могу придумать, как это сделать. Я имею в виду, что я могу добавить в новый метод экземпляра, который я бы сделал, а затем переопределить его в подклассах.
Благодарим вас за то, что вы прочитали мой вопрос или какие-либо подсказки, которые вы можете мне дать.
Вы будете нуждаться другой (возможно абстрактную) метод, который определяет, если средний балл достаточно высок, на основе реализации 'Student' – MadProgrammer
После удаления метода deansHonorList из подклассов, я сделал его в суперклассе. Затем он говорит, что я могу создать другой метод экземпляра в суперклассе и переопределить его в подклассах и использовать метод экземпляра в методе deansHonoutList, который также существует в суперклассе. Таким образом, абстрактным методом будет метод нового экземпляра, о котором вы говорите? –
Подсказка: вы описали все шаги, которые необходимо предпринять в своем вопросе. Но вы не знаете, почему *. Итак, прежде чем вы подумаете о том, как это сделать, вы должны знать, что вы делаете. – Kenney