重新生成Student父类
时间: 2024-10-05 16:00:31 浏览: 19
好的,以下是`Student`父类的重构版本,包含了更多的细节和一些优化:
```java
import java.util.Map;
public abstract class Student implements Person {
private String id;
private String name;
private String gender;
private Map<String, Double> subjectsScores; // 各科学分和成绩
protected double totalScore; // 总分数累加器
protected double averageScore; // 平均分数
public Student(String id, String name, String gender, Map<String, Double> scores) {
this.id = id;
this.name = name;
this.gender = gender;
this.subjectsScores = scores;
updateTotalScore();
}
// 实现Person接口的方法
@Override
public String getID() {
return id;
}
@Override
public String getName() {
return name;
}
@Override
public String getGender() {
return gender;
}
@Override
public double calculateTotalScore() {
return totalScore;
}
@Override
public double calculateAverageScore() {
if (subjectsScores.size() > 0) {
return totalScore / subjectsScores.values().stream().mapToDouble(Double::doubleValue).sum();
} else {
return 0.0;
}
}
// 算法抽象,子类可以根据需要覆盖
public abstract String gradeLevel(double individualScore);
// 更新总分和平均分
private void updateTotalScore() {
totalScore = subjectsScores.values().stream().mapToDouble(Double::doubleValue).sum();
}
// 提供一个通用的评分等级方法示例,可根据实际需求修改
public String standardGradeLevel(double score) {
double normalizedScore = score / calculateAverageScore();
// 这里只是一个简单的等级划分例子,根据需要调整
if (normalizedScore >= 1.5) {
return "优秀";
} else if (normalizedScore >= 1.0) {
return "良好";
} else {
return "合格";
}
}
// 供测试使用的辅助方法
public void addSubjectScore(String subject, double score) {
subjectsScores.put(subject, score);
updateTotalScore();
}
}
```
在这个版本中,我们添加了`totalScore`和`averageScore`变量,用于累计和计算学生的总分和平均分。同时,`gradeLevel`方法被声明为抽象的,以便子类可以提供特定的实现。`standardGradeLevel`方法作为示例给出了一个通用的评分等级计算逻辑。
阅读全文