【Java】接口及其实现(实验四)

目录

一、实验目的

二、实验内容

三、实验小结


一、实验目的

  1. 了解接口的作用
  2. 掌握接口的定义与实现
  3. 掌握接口的回调

二、实验内容

1. 定义一个接口Human,其中有一无参的、返回类型为void的方法speak();定义类Student实现接口,输出学生姓名、学号、学校、专业、兴趣等信息;定义类Worker实现接口,输出工人姓名、工作单位、职务和兴趣信息;主类中定义接口变量,赋值,运用接口回调类中的方法来输出数据。

源代码:

 实验运行截图:

2.评价成绩 

体操比赛计算选手成绩的办法是去掉一个最高分和最低分后再计算平均分,而学校考察一个班级的某科目的考试情况时,是计算全班同学的平均成绩。编写能够满足如下条件的程序:

(1)定义一个接口Compute,包含计算平均值的抽象方法。

(2)定义一个类Gymnastics实现上述接口的用于计算体操比赛选手成绩的类。

(3)定义一个类School实现上述接口的用于计算班级平均成绩的类。

(4)在主类中通过接口回调分别计算并输出体操选手最后得分和班级考试平均分数。要求打分通过键盘输入,结果输出占6列,前者右对齐,保留三位小数,后者左对齐,保留两位小数。

 源代码:

 实验运行截图:

3. 小狗在不同环境条件下可能呈现不同的状态表现,如 "听主人的命令"、"嬉戏"、"晃动尾巴,表示欢迎"、"狂叫,并冲上去狠咬敌人"等,要求用接口封装小狗的状态。具体要求如下。

(1)编写一个接口DogState,其中有一个showState()方法,用来呈现小狗的状态。

(2)编写若干个实现DogState接口的类,负责刻画小狗不同的状态。

(3)编写一个Dog类,类中封装接口变量dogState,定义变量的seter方法,类中定义show()方法用接口回调showState()显示对象的状态。

(4)编写主类,测试小狗的不同状态。要求用匿名类对象显示小狗的"嬉戏"状态。

源代码:

实验运行截图:

三、实验小结

1、接口跟抽象类有很多类似的功能机制。虽然java不支持类多继承、但通过接口子类可以实现多继承的功能。

2、接口由常量(public final 类型 变量=value,定义时必须初始化、中间不允许修改)和方法(abstract方法、default方法、static方法、private方法)构成;不管是在抽象类还是在类实现接口中,abstract 方法必须被重写。其中static类方法、private私有方法不能被实现接口的类对象直接访问。

3、接口中的常量可以通过“接口名、实现接口的类名、类的对象”直接访问而static类方法只能通过接口名调用;private私有方法通常与default默认实例方法配合使用即在默认实例方法体中间接调用private私有方法。

4、接口实现的方式有两种,分别是:

4.1类实现接口

                          Class 类名 extends 父类 implements  接口,.....

4.2lambda 表达式实现接口

                          接口类型 变量=(形参)->{函数体};

5、将接口实现的类所创建的对象的引用(地址)赋值给接口类型变量,然后通过接口变量间接调用类中重写接口的抽象方法即为接口回调。

6、接口的多态实现机制就是多个类实现同一个接口并各自重写接口中的抽象方法,然后通过接口类型变量回调这些类中重写接口的方法机制就是接口的多态、跟抽象类的多态实现机制相似。

7、我们们可以单独定义个类、类中包含有接口类型变量和方法,来专门实现接口的回调。这样既体现了面向接口的编程思想同时也遵守了程序设计“扩展开放、修改关闭”的原则。

@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!

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

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

相关文章

【ECharts】调用接口获取后端数据的四种方法

使用eacharts做大屏,需要使用后端数据,下面的方法是自己试过有效的,有什么不对的,望各位大佬指点。 目录 方法一:在mounted中使用定时器调用eacharts方法(定时器可以获取到data中的数据) 方法…

Stable Diffusion 3震撼发布模型与Sora同架构

Prompt:Epic anime artwork of a wizard atop a mountain at night casting a cosmic spell into the dark sky that says "Stable Diffusion 3" made out of colorful energy Stability AI发布Stable Diffusion 3文本到图像模型。该模型采用扩散变换架构…

SQL库操作

1、创建数据库 概念 创建数据库:根据项目需求创建一个存储数据的仓库 使用create database 数据库名字创建 数据库层面可以指定字符集:charset/character set 数据库层面可以指定校对集:collate 创建数据库会在磁盘指定存放处产生一个文件夹 创建语法 create …

【算法分析与设计】1的个数

📝个人主页:五敷有你 🔥系列专栏:算法分析与设计 ⛺️稳中求进,晒太阳 题目 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位…

【初始RabbitMQ】交换机的实现

交换机概念 RabbitMQ消息传递模型的核心思想就是:生产者生产的消息从不会直接发送到队列。实际上,通常生产者不知道这些消息会传递到那些队列中 相反,生产者只能将消息发送到交换机,交换机的工作内容也很简单,一方面…

云服务器发展史

在数字化浪潮的推动下,云服务器作为信息技术领域的一颗璀璨明珠,其发展史是一部科技进步和创新思维的缩影。从最初的概念提出到现如今的广泛应用,云服务器经历了翻天覆地的变化,不仅极大地推动了信息技术的发展,也彻底…

JavaScript运算符

文章目录 运算符介绍算术运算符递增和递减运算符比较运算符逻辑运算符短路运算逻辑与 逻辑或 赋值运算符运算符优先级 运算符介绍 算术运算符 %取余运算符的主要用途: 判断某个数是否能被某个数整除。 浮点数的精度问题: 所以:不要直接判断…

Unicode转换 [ASIS 2019]Unicorn shop1

打开题目 点击进去之后是一个购买独角兽的界面,有四种类型的独角兽,前三种的价格比较便宜,最后的独角兽价格比较贵。 我们先尝试购买前三种独角兽,输入id,然后price输入9 我们直接查看源代码 可以看到在charset"…

操作符的属性:优先级、结合性(缺表达式求值)

C语言的操作符有2个重要的属性:优先级、结合性,这两个属性决定了表达式求值的计算顺序。 我们先简单了解一下操作符的优先级和结合性,附上表格,简单记一下顺序,搭配几道题来加深印象。 1.优先级 优先级指的是&#x…

linux常用的网络命令实战分享

文章目录 ifup/down命令ifconfig命令观察网络接口信息修改接口参数增加虚拟网络接口 route命令查看路由表增加路由表规则删除路由表规则 IP 命令ip linkip addr设定路由 ip route arp 命令 在实际研发运维工作中常常会涉及到网关相关的操作和知识,这里对linux下常用…

要赢,且不止一次,2024创维汽车势不可挡!

随着除夕钟声的敲响,创维汽车迎来了全新的一年。过往取得的成绩已成为了历史,全新的未来还有待奋斗者们去开创。为辞旧迎新,创维汽车于2月22日及2月23日召开了“新春启航,共谋发展”营销会议,为2024做下全新布局。 创维…

js设计模式:组合模式

作用: 可以用来将数据组合成树形的数据,可以像操作单独的对象一样去操作整个树形结构 树是相对复杂的数据,使用组合模式去封装树形的组件,是很重要的,可以对外暴露很多树的操作方法 示例: //一个树型的对象数据class Organ {constructor(label, value, parentName) {this.la…

离散化算法

离散化算法的思想是将一组连续的数据映射到一组离散的取值&#xff0c;通常是整数。它的主要目的是将连续的数据转换为离散的数据&#xff0c;以便进行统计、计数、排序等操作。 C代码实现: #include<iostream> #include<vector> #include<algorithm> usi…

数据库事物复习

事务 比如说将张三的银行账户拿出一千给李四&#xff0c;首先需要查询张三的账户余额&#xff0c;扣除1000&#xff0c;然后如果给李四加上1000的过程中出现异常会回滚事务&#xff0c;临时修改的数据会回复回去。 -- 1. 查询张三账户余额 select * from account where name …

如何用GPT进行成像光谱遥感数据处理?

第一&#xff1a;遥感科学 从摄影侦察到卫星图像 遥感的基本原理 遥感的典型应用 第二&#xff1a;ChatGPT ChatGPT可以做什么&#xff1f; ChatGPT演示使用 ChatGPT的未来 第三&#xff1a;prompt 提示词 Prompt技巧&#xff08;大几岁&#xff09; 最好的原则和策…

洛谷P8772 [蓝桥杯 2022 省 A] 求和(前缀和差分)

#include <stdio.h> #include<stdlib.h> int main() {int n;scanf("%d", &n);// 读取数组 aint* a (int*)malloc(n * sizeof(int));for (int i 0; i < n; i) {scanf("%d", &a[i]);}// 计算前缀和数组 prefix_sumlong long *prefi…

unity学习(30)——跳转到角色选择界面(跳转新场景)

1.在scene文件夹中&#xff08;[siːn]&#xff09;&#xff0c;右键->create->scene&#xff0c;名字叫SelectMenu&#xff08;选择角色场景&#xff09;。 2.把新建场景拖拽到hierarchy[ˈhaɪərɑːki]中。 3.此时才能在file->build setting中Add open scene&…

【Docker快速入门】Docker部署MySQL

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

Kotlin filterIsInstance filterNotNull forEach

Kotlin filterIsInstance filterNotNull forEach fun main(args: Array<String>) {val i1 MyItem(1, 1)val i2: MyItem? nullval i3: Int 3val i4 "4"val i5 nullval i6 MyItem(6, 6)val list mutableListOf<Any?>(i1, i2, i3, i4, i5, i6)lis…

SpringBoot-2.7.6基于SLF4J日志门面的日志框架切换

SpringBoot 没有强制性的日志记录依赖项,但 Commons Logging API 除外,它通常由 Spring Framework 的模块提供。 要使用 Logback,您需要将其包含在类路径中。 推荐的方法是您只需要通过启动器,这都取决于 . 对于 Web 应用程序 ,因为它可传递地依赖于日志记录启动器。 如果…