【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.hqwc.cn/news/487004.html

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

相关文章

HTTP 与 HTTPS-HTTP 解决了 HTTP 哪些问题?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTP 解决了 HTTP 哪些问题? HTTP 由于是明文传输,所以安全上存在以下三个风险: 窃听风险,比如通信链路上可以获取通信内容,用户号容易没。篡改风险,比如…

《Python 语音转换简易速速上手小册》第10章 未来趋势和发展方向(2024 最新版)

文章目录 10.1 语音技术的未来展望10.1.1 基础知识10.1.2 主要案例:语音驱动的虚拟助理案例介绍案例 Demo案例分析10.1.3 扩展案例 1:情感敏感的客服机器人案例介绍案例 Demo案例分析10.1.4 扩展案例 2:多模态智能会议系统案例介绍案例 Demo

jetson nano——安装archiconda

目录 1.archiconda3我在这提供了下载链接,点解下面链接即可1.看好文件所在位置,如果装错了,那么环境变量的路径自己进行相应的修改。2.添加环境变量 2.可能部分伙伴输入一些激活,啥的命令激活不了,那么输入下面这些代码…

区块链与Solidity详细介绍及基本语法使用

一、区块链简介 区块链是一种分布式数据库技术,它以块的形式存储数据,并通过加密算法确保数据的安全性。每个块包含一系列交易,并通过哈希值与前一个块相连接,形成一个链式结构。这种结构使得数据难以被篡改,因为任何对…

Python实战:读取MATLAB文件数据(.mat文件)

Python实战:读取MATLAB文件数据(.mat文件) 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 👈 希望得到您的订阅…

Kotlin基础——泛型

泛型类型参数 编译器一般可以推导出类型实参 若创建空的list&#xff0c;则需要显示指定类型实参&#xff0c;可以用如下两种方式 val name: MutableList<String> mutableListOf()val name2 mutableListOf<String>()泛型函数 public fun <T> List<T&…

后端程序员入门react笔记(四)-综合运用,写一个小demo

样式模块化 有时候我们会遇到这样的问题&#xff0c;有两个css对一个class声明了样式&#xff0c;这样的话后引入的css会覆盖前面的css样式&#xff0c;导致样式冲突&#xff0c;那么我们怎么解决这种问题呢&#xff0c;我们可以使用样式的模块化&#xff0c;我们起名一个inde…

多线程、分布式运行用例

python多线程 threading模块 多线程实例 # -*- coding: utf-8 -*- # Time : 2024/2/7 15:50 # Author : 居里夫人吃橘子 # File : class01.py # Software: PyCharm import threading from time import sleepdef run(name):print(name 该起床了)sleep(2)print(name …

OpenAI文生视频大模型Sora概述

Sora&#xff0c;美国人工智能研究公司OpenAI发布的人工智能文生视频大模型&#xff08;但OpenAI并未单纯将其视为视频模型&#xff0c;而是作为“世界模拟器” &#xff09;&#xff0c;于2024年2月15日&#xff08;美国当地时间&#xff09;正式对外发布。 Sora可以根据用户…

jenkins配置ssh的时候测试连接出现Algorithm negotiation fail

背景&#xff1a;当jenkins升级后&#xff0c;同时ssh插件也升级&#xff0c;测试ssh连接的时候 出现的问题&#xff1a; com.jcraft.jsch.JSchAlgoNegoFailException: Algorithm negotiation fail: algorithmName"server_host_key" jschProposal"ecdsa-sha2-n…

解决SpringAMQP工作队列模型程序报错:WARN 48068:Failed to declare queue: simple.queue

这里写目录标题 1.运行环境2.报错信息3.解决方案4.查看解决之后的效果 1.运行环境 使用docker运行了RabbitMQ的服务器&#xff1a; 在idea中导入springAMQP的jar包&#xff0c;分别编写了子模块生产者publisher&#xff0c;消费者consumer&#xff1a; 1.在publisher中运行测试…

git 使用总结

文章目录 git merge 和 git rebasegit mergegit rebase总结 git merge 和 git rebase git merge git merge 最终效果说明&#xff1a; 假设有一个仓库情况如下&#xff0c;现需要进行 merge&#xff1a; merge 操作流程&#xff1a; merge 的回退操作&#xff1a; git reba…