面向对象编程————接口案例

接口特性

案例

思路:

首先应该建立整体大框架:应该先创建一个学生类,里面标明学生的各项属性:姓名、性别、成绩。要打印全班学生的信息,需要一个班级类,在里面创建Arraylist容器包含全体学生数据。然后在里面定义打印学生信息和平均成绩的方法。本题的关键在于有两种实现方案并要求灵活切换,那么可以定义一个学生操作接口,定义两个实现类,分别实现两种方案。需要切换方案的时候只需要修改使用的那个实体类就可以了。

代码:

先写一个学生类,定义无参有参构造器,以及get / set等方法:

public class Student {private String name;private char sex;private double score;public Student() {}public Student(String name, char sex, double score) {this.name = name;this.sex = sex;this.score = score;}public String getName() {return name;}public void setName(String name) {this.name = name;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public double getScore() {return score;}public void setScore(double score) {this.score = score;}
}

定义一个班级类,包含班级所有学生信息:

public class ClassManager {private ArrayList<Student> students = new ArrayList<Student>();public ClassManager(){students.add(new Student("The shy",'男',100));students.add(new Student("xiaohu",'男',95.5));students.add(new Student("yangzi",'女',80));students.add(new Student("shiba",'女',99.0));students.add(new Student("chengcheng",'女',88));}public void print(){//StudentsOperator s = new printSelect();//s.printInfo(students);//s.printScore(students);}
}

接下来就是实现打印信息和打印成绩的函数了,因为有2种方案,所以先实现一个接口和2个对应的实现类:

接口定义为StudentsOperator:

public interface StudentsOperator {void printInfo(ArrayList<Student> students);void printScore(ArrayList<Student>students);
}

两个实现类:

实现类PrintAll:

public class printALL implements StudentsOperator{@Overridepublic void printInfo(ArrayList<Student>students) {System.out.println("-----------全部学生信息如下-------------");for (int i = 0; i < students.size(); i++) {System.out.println(students.get(i).getName()+"  "+students.get(i).getSex()+"  的成绩是 "+students.get(i).getScore());}}@Overridepublic void printScore(ArrayList<Student>students) {double sum = 0;for (int i = 0; i < students.size(); i++) {sum += students.get(i).getScore();}System.out.println("平均成绩是 "+sum / students.size());}
}

实现类PrintSelect:

    public void printScore(ArrayList<Student>students) {double sum = 0;double max = 0,min = 100;for (int i = 0; i < students.size(); i++) {if(students.get(i).getScore() > max) max = students.get(i).getScore();if(students.get(i).getScore() < min) min = students.get(i).getScore();sum += students.get(i).getScore();}System.out.println("平均成绩是 "+String.format("%.2f",(sum-max-min) / (students.size()-2)));}}

这样整体框架就搭建好了,下面如何切换方案呢?————在ClassManager类Print方法中,分别用实现类创建对象。我们知道:一个接口可以被多个实现类实现,这样实现出的接口可以很方便地切换实现类,因为不同实现类中有不同的重写方法对接口中的抽象方法进行了重写,所以这样就可以调用不同的方法完成切换业务。

实验

在Test类中创建ClassManager对象,调用Print方法:

public class Test {public static void main(String[] args) {ClassManager clas = new ClassManager();clas.print();}
}

先来看一下方案一(打印所有学生信息和平均分):

 再看一下方案二(打印男女人数,去掉最高分最低分的平均成绩):

切换方法————只需要将实现类printAll 换成 printSelect就可以了,其他不用改,是不是很方便

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/291481.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows下使用gtest

我是在window下使用clion来写c的&#xff0c;最近学习了gtest&#xff0c;中间遇到了一些问题&#xff0c;记录一下。 整体目录 先看一下目录结构 两个测试case&#xff0c;前面就有运行的标志&#xff0c;直接点击就能运行 具体的代码 CMakeLists.txt cmake_minimum_req…

MySQL:通过官方mysql server,搭建绿色版mysql服务器(Windows)

1. 官网下载mysql server 下载mysql server的zip文件&#xff0c;地址&#xff1a; https://downloads.mysql.com/archives/community/ 解压后 2. 初始化数据库 运行cmd&#xff0c; 进入bin目录&#xff0c;运行 mysqld --initialize-insecureinitialize-insecure说明如…

储能安全事频发,汉威科技传感器及综合解决方案助力储能消防建设

近年来&#xff0c;储能赛道狂飙突进&#xff0c;已经成为我国以及美国、日本、澳大利亚、欧洲诸国的新兴产业。《“十四五”国家消防工作规划》特别提到&#xff0c;要积极防范新业态新材料新风险&#xff0c;其中包括新型储能设施。 储能系统是新型电力系统有效的调峰调频、平…

AcWing算法进阶课-1.9.1Dinic/ISAP求最小割

算法进阶课整理 CSDN个人主页&#xff1a;更好的阅读体验 原题链接 题目描述 给定一个包含 n n n 个点 m m m 条边的有向图&#xff0c;并给定每条边的容量&#xff0c;边的容量非负。 图中可能存在重边和自环。求从点 S S S 到点 T T T 的最小割。 输入格式 第一行包…

伪协议和反序列化 [ZJCTF 2019]NiZhuanSiWei

打开题目 代码审计 第一层绕过 if(isset($text)&&(file_get_contents($text,r)"welcome to the zjctf")){ echo "<br><h1>".file_get_contents($text,r)."</h1></br>"; 要求我们get传参的text内容必须为w…

Spring Security:从入门到精通,全方位指南

Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多&#xff0c;因为相比与SpringSe…

淘宝API:连接消费者与商家的桥梁

随着互联网的快速发展&#xff0c;电子商务已成为人们日常生活的重要组成部分。淘宝作为中国最大的电商平台之一&#xff0c;不仅为消费者提供了丰富的商品选择&#xff0c;还为商家提供了广阔的销售渠道。而淘宝API&#xff08;应用程序接口&#xff09;则是连接消费者与商家的…

YashanDB个人版体验总结

前言 YashanDB数据库具有多项功能特性。首先&#xff0c;它是一个分布式数据库&#xff0c;支持水平扩展&#xff0c;能够将数据分散到多个节点上&#xff0c;从而提高系统的可靠性和性能。其次&#xff0c;YashanDB数据库具备高可用性&#xff0c;支持主从复制和自动故障转移…

你以为出现NoClassDefFoundError错误会是什么原因?

你以为出现NoClassDefFoundError错误会是什么原因&#xff1f; 1、概述2、事情经过3、总结 1、概述 大家好&#xff0c;我是欧阳方超&#xff0c;可以关注我的公众号“欧阳方超”&#xff0c;后续内容将在公众号首发。 同样的错误&#xff0c;非一样的解决方式。NoClassDefFou…

2023 英特尔On技术创新大会直播 |AI小模型更有性价比

前言&#xff1a; 今年是引爆AI的一年&#xff0c;从幼儿园的小朋友到80岁的老奶奶都认识AI&#xff0c;享受AI带来的便捷&#xff0c;都在向市场要智能&#xff0c;但AI的快速发展离不开底层硬件设施的革新。 英特尔是全球知名的半导体公司&#xff0c;专注于计算机处理器和芯…

理论篇:什么是NPM以及为什么NPM如此重要

&#x1f4cc; NPM&#xff0c;全称是 Node Package Manager&#xff0c;NodeJS 包管理工具 当我们开始现代化前端项目开发时&#xff0c;总是会被告知需要提前安装NodeJS&#xff0c;而且NodeJS软件包不仅仅会在我们的开发设备上安装NodeJS运行环境&#xff0c;同时会附带NPM工…

Java修饰符排列规范,一个不常使用但有必要注意的小细节

你好呀&#xff0c;我是仨仨&#xff01; 今天在整理项目的时候&#xff0c;注意到这样一个变量&#xff1a; SonarLint 提示需要用 static 修饰&#xff0c;于是我顺手就在 final 后加了一个static&#xff0c;然而等 SonarLint 再次检查后&#xff0c;又出现了新的提示&…