天天看點

封裝、繼承、多态的聯合使用實作不同等級學生分數資訊的統計

要求:根據不同學生的等級進行不同的分數成績評定

1、封裝

1、封裝的概念

。。。

package bao;

abstract class Student {

  final static int CourseNo = 3;// 課程
  String name;// 姓名
  String type; // 類型
  int[] courses;// 成績的數組
  String courseGrade;// 等級

  public Student(String name) {
    this.name = name;
    courses = new int[CourseNo];
    courseGrade = " ";// 初始成績等級為空字元
  }

  public abstract void calculateGrade();// 計算總成績的抽象方法

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  public void setCourseScore(int courseNumber, int courseScore) {
    courses[courseNumber] = courseScore; // 按課程索引号設定課程的成績
  }

  public int getCourseScore(int courseNumber) {
    return courses[courseNumber];
  }

  public void setCourseGrade(String courseGrade) {
    this.courseGrade = courseGrade;
  }

  public String getCourseGrade() {
    return courseGrade;
  }

}      

2、繼承

2.1、大學生繼承學生類

package bao;

class Undergraduate extends Student {

  public Undergraduate(String name) { // 構造方法
    super(name); // 使用super調用父類的構造方法
    type = "大學生"; // 初始化父類的屬性

  }

  @Override
  public void calculateGrade() { // 實作父類的抽象方法

    int total = 0;
    double average = 0;
    for (int i = 0; i < CourseNo; i++) { // 所有課程的成績總和
      total += courses[i];
    }
    average = total / CourseNo; // 計算平均成績
    if (average >= 90 && average < 100)
      courseGrade = "優秀";
    else if (average >= 80 && average < 90)
      courseGrade = "良好";
    else if (average >= 70 && average < 80)
      courseGrade = "一般";
    else if (average >= 60 && average < 70)
      courseGrade = "及格";
    else
      courseGrade = "不及格";

  }

}      

2.2、 研究所學生繼承學生類

package bao;

class Postgraduate extends Student {

    public Postgraduate(String name) {
        super(name);
        type = "研究所學生";
    }

    public void calculateGrade() { // 實作父類的抽象方法

        int total = 0;
        double average = 0;
        for (int i = 0; i < CourseNo; i++) { // 所有課程的成績總和
            total += courses[i];
        }
        average = total / CourseNo; // 計算平均成績
        if (average >= 95 && average < 100)
            courseGrade = "優秀";
        else if (average >= 85 && average < 95)
            courseGrade = "良好";
        else if (average >= 75 && average < 85)
            courseGrade = "一般";
        else if (average >= 65 && average < 75)
            courseGrade = "及格";
        else
            courseGrade = "不及格";

    }

}      

3、多态

package bao;

public class Polymorphism {

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Student[] students = new Student[5];
    // 父類引用子類的對象
    students[0] = new Undergraduate("張三");
    students[1] = new Undergraduate("趙薇");
    students[2] = new Postgraduate("李四");
    students[3] = new Undergraduate("楊密");
    students[4] = new Postgraduate("唐洋");
    for (int i = 0; i < 5; i++) {
      students[i].setCourseScore(0, 88);
      students[i].setCourseScore(1, 90);
      students[i].setCourseScore(2, 96);
    }
    for (int i = 0; i < 5; i++) {
      students[i].calculateGrade();// 調用各自類中的方法
    }
    System.out.println("姓名 " + "          類型" + "              成績");
    System.out.println("--------------------------------------------");
    for (int i = 0; i < 5; i++) {
      System.out
          .println(students[i].getName() + "          " + students[i].getType() + "              " + students[i].getCourseGrade());
    }

  }

}