(1) 掌握面向对象的三个核心特征封装、继承和多态的运用 ;
(2) 理解成员变量的隐藏方法;
(3) 学会使用抽象类和接口;
(4) 利用多态降低类间的耦合。
设计 3 个类 , 分别是学生类 Student, 本科生类 Undergaduate, 研究生类Postgraduate,其中 Student 类是一个抽象类 , 它包含一些基本的学生信息如姓名、所学课程、课程成绩等 , Undergraduate 类和 Postgraduate 都是 Student 类的子类 , 它们之间的主要差别是计算课程成绩等级的方法有所不同 , 研究生的标准要比本科生的标准高一些 , 如表所示:
假设某班级里既有本科生也有研究生 , 请编写程序统计出全班学生的成绩等级并显示出来。此题关键是设计一个学生数组 , 既能存放本科生对象 , 又能存放研究生对象。
三、总体设计(设计原理、设计方案及流程等)主要原理:由于班级中的同学有本科生也有研究生,即必须要用到多态的思想,运用对象的向上转型。
主要步骤:
1.创造三个类,student,Undergaduate,Postgraduate,其中Undergaduate和Postgraduate类继承student类。
2.并且实现student类中的抽象方法来进行判断成绩。
3.其中student中有一个hashMap属性用来储存这个学生对象的成绩。
4.通过构造方法可以对student类中的name与course_Results属性进行初始化,再调用重写的判断成绩的方法即可判断出成绩。
5.在text测试类中构建一个hashMap与undergradute对象,postgradute对象,即可测试。
package homeWork02;
import java.util.HashMap;
public abstract class Student {
private String name;
private HashMap course_Results;
public abstract void grade();
public Student(String name, HashMap course_Results) {
this.name = name;
this.course_Results = course_Results;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public HashMap getCourse_Results() {
return course_Results;
}
public void setCourse_Results(HashMap course_Results) {
this.course_Results = course_Results;
}
public void addCourse_Results(String course,int result){
course_Results.put(course,result);
}
}
package homeWork02;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class Undergraduate extends Student{
public Undergraduate(String name, HashMap course_Results) {
super(name, course_Results);
}
@Override
public void grade() {
HashMap course_Results = super.getCourse_Results();
Set set = course_Results.keySet();
Iterator it = set.iterator();
while(it.hasNext()){
String course = it.next();
int grade = course_Results.get(course);
if(grade <= 50){
System.out.println(getName()+"同学的"+course+"课程"+"是不及格");
}else if(50 < grade && grade <= 60){
System.out.println(getName()+"同学的"+course+"课程"+"是及格");
}else if(60 < grade && grade <= 70){
System.out.println(getName()+"同学的"+course+"课程"+"是一般");
}else if(70 < grade && grade <= 80){
System.out.println(getName()+"同学的"+course+"课程"+"是良好");
}else if(80 < grade && grade <= 100){
System.out.println(getName()+"同学的"+course+"课程"+"是优秀");
}
}
}
}
package homeWork02;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class Postgraduate extends Student{
public Postgraduate(String name, HashMap course_Results) {
super(name, course_Results);
}
@Override
public void grade() {
HashMap course_Results = super.getCourse_Results();
Set set = course_Results.keySet();
Iterator it = set.iterator();
while(it.hasNext()){
String course = it.next();
int grade = course_Results.get(course);
if(grade <= 60){
System.out.println(getName()+"同学的"+course+"课程"+"是不及格");
}else if(60 < grade && grade <= 70){
System.out.println(getName()+"同学的"+course+"课程"+"是及格");
}else if(70 < grade && grade <= 80){
System.out.println(getName()+"同学的"+course+"课程"+"是一般");
}else if(80 < grade && grade <= 90){
System.out.println(getName()+"同学的"+course+"课程"+"是良好");
}else if(90 < grade && grade <= 100){
System.out.println(getName()+"同学的"+course+"课程"+"是优秀");
}
}
}
}
package homeWork02;
import java.util.HashMap;
public class Test {
public static void main(String[] args) {
HashMap hashMap01 = new HashMap<>();
hashMap01.put("数学",87);
hashMap01.put("物理",97);
hashMap01.put("英语",24);
Student[] students = new Student[2];
students[0] = new Undergraduate("wangjie",hashMap01);
students[1] = new Postgraduate("gubao",hashMap01);
for (Student student: students) {
student.grade();
}
}
}
五、结果分析与总结



