封装、继承、多态的联合使用实现不同等级学生分数信息的统计

简介: 这篇文章通过Java代码示例演示了封装、继承和多态的概念,并用它们来实现不同等级学生分数信息的统计。

要求:根据不同学生的等级进行不同的分数成绩评定

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());
        }

    }

}

4、测试结果

在这里插入图片描述

相关文章
|
搜索推荐 数据挖掘 API
京东商品评论数据接口(JD.item_review)丨京东API接口指南
京东商品评论数据接口(JD.item_review)丨京东API接口指南
1240 1
|
Kubernetes 网络协议 容器
k8s搭建集群报错汇总—202302【更新】
k8s搭建集群报错汇总—202302【更新】
333 0
|
Ubuntu 定位技术
百度搜索:蓝易云【Ubuntu如何配置软件镜像源?】
现在,你的Ubuntu系统已经配置了新的软件镜像源。你可以使用 `apt`或 `apt-get`命令来安装、更新或卸载软件包,并从所选的镜像源获取软件包。
644 0
|
开发框架 前端开发 JavaScript
利用Spire.Pdf实现PDF添加印章的操作
利用Spire.Pdf实现PDF添加印章的操作
|
Go
Golang深入浅出之-信号(Signals)处理与优雅退出Go程序
【4月更文挑战第23天】在Go语言中,使用`os/signal`包处理信号对实现程序优雅退出和响应中断至关重要。本文介绍了如何注册信号处理器、处理常见问题和错误,以及提供代码示例。常见问题包括未捕获关键信号、信号处理不当导致程序崩溃和忽略清理逻辑。解决方案包括注册信号处理器(如`SIGINT`、`SIGTERM`)、保持信号处理器简洁和执行清理逻辑。理解并正确应用这些原则能增强Go程序的健壮性和可管理性。
616 1
|
数据可视化 算法 数据挖掘
Python主题建模LDA模型、t-SNE 降维聚类、词云可视化文本挖掘新闻组数据集2
Python主题建模LDA模型、t-SNE 降维聚类、词云可视化文本挖掘新闻组数据集
|
机器学习/深度学习 人工智能 算法
如何建立计算机视觉驱动的汽车损伤检测系统-------杂记
如何建立计算机视觉驱动的汽车损伤检测系统-------杂记
318 0
|
Android开发
【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )(二)
【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )(二)
529 0
|
JavaScript 应用服务中间件 nginx
docker安装的nginx放在html文件下的vue项目404解决
docker安装的nginx放在html文件下的vue项目404解决
316 0