JAVA实验项目(二): 抽象类、接口的定义与使用

实验项目二   抽象类、接口的定义与使用

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊!

喜欢我的博客的话,记得点个红心❤️和小关小注哦!您的支持是我创作的动力!

一、实验目的

(1) 学会使用类的静态方法 ;

(2) 学习如何定义接口 ;

(3) 掌握接口的实现及其使用方式;

(4) 理解接口与抽象类的区别。

二、实验内容

  1. 定义传播媒体类Media为抽象类,其属性包括:id即书号或刊号,title即名称。方法包括:

抽象方法showInformation(),显示当前对象的属性值;

静态方法showType(),显示当前对象的类型,如“Book”或“Newspaper”。

类Book、类Newspaper都是Media的子类,Book类特有的属性包括:press即出版社,authors即作者。

在测试类中创建Book和Newspaper的对象,显示每个对象的类型,并显示每个对象的信息。

         2. 设计和实现一个 Soundable 接口 , 该接口具有发声功能 , 同时还能够调节声音大小。 Soundable 接口的这些功能将会由 3 种声音设备来具体实现 , 它们分别是收音机 Radio 、随身昕 Walkman 和手机Mobilephone 。最后还要设计一个应用程序类来使用这些实现了 Soundable 接口的声音设备类。程序运行时 , 先询问用户想听哪种设备 , 然后程序就会按照该设备的工作方式来发出声音。

三、实验原理

1、类的静态方法;

2、抽象类与接口的定义与使用。

四、实验环境

电脑主机酷睿i5、内存4G以上,操作系统Windows 7以上,开发工具eclipse。

五、实验步骤

1、

2、

3、

六、实验结果

    

七、实验分析

1、定义传播媒体类Media为抽象类,其属性包括:id即书号或刊号,title即名称。方法包括:

抽象方法showInformation(),显示当前对象的属性值;

静态方法showType(),显示当前对象的类型,如“Book”或“Newspaper”。

类Book、类Newspaper都是Media的子类,Book类特有的属性包括:press即出版社,authors即作者。

在测试类中创建Book和Newspaper的对象,显示每个对象的类型,并显示每个对象的信息。

第1题解答如下:

创建包并分类完毕:Media为抽象类,Book与Newspaper为子类,test03为测试类:

df2b805812a242be82739a18ef12da0f.png

抽象类Media代码:

8eb4832802e34b19b3c9502ad4710c6d.png

子类Book代码:

3be65099dbdd4332aceee5399d600c5d.png

子类Newspaper代码:

2e3faba75dba45b3922c67b3f48d4cd0.png

测试类test03代码

2f60a037696d47c39863bcab27bf56b5.png

测试结果显示:

b7b5199548bd46659f42ea1768082743.png

2、设计和实现一个 Soundable 接口 , 该接口具有发声功能 , 同时还能够调节声音大小。 Soundable 接口的这些功能将会由 3 种声音设备来具体实现 , 它们分别是收音机 Radio 、随身昕 Walkman 和手机Mobilephone 。最后还要设计一个应用程序类来使用这些实现了 Soundable 接口的声音设备类。程序运行时 , 先询问用户想听哪种设备 , 然后程序就会按照该设备的工作方式来发出声音。

第2题解答如下:

创建包并分类完毕:Soundable为接口,Radio,Walkman与Mobilephone为实现类,People为普通类,InterfaceTest为测试类:

5dcc9cbcd11945e0be70efc4281743f2.png

接口Soundable的代码:

f2ea74e298d0402c879f7be414b3b844.png

实现类Radio代码:

830f9ad5fdc34acb925dd253a9b5439f.png

实现类Walkman代码:

d3e1d825178843af92b79821e8269ea0.png

实现类Mobilephone代码:

72d9c0b93a574f3cbf6008574b050b88.png

普通类People代码:

7f4f21eb51ed46388ffa889fad6a769f.png

测试类InterfaceTest代码:

6434b8ce27f646d28397d613b6673ce3.png

运行结果显示:

adb9c8da740e4259ac5f329f7a5081c3.png

思考

  1. 请问在 InterfaceTest 类中 ,SoundDevice[] 数组是什么类型的 , 该数组为什么能存放 3 种不同的对象 Radio、Walkman 和 Mobilephone 呢 ?

答:SoundDevice[] 数组是接口类型,因为三个对象都实现了这个接口,因而可以调用实现了接口的实现类。

(2) 在程序中Soundable 是一个接口 , 那么该接口是否可以被实例化呢 ? 请在InterfaceTest 类的 main() 方法中加入以下语句试验一下 , 并分析结果。

Soundable    Sound=new Soundable(),

答:不能被实例化,因为Soundable不是一个类,只是一个接口。

(3) 现在假定要为程序增加一个闹钟类 Clock, 该类也实现 Soundable 接口 , 能够发出滴答声 , 请将以下的 Clock 类加入到 InterfaceTest.java 程序中 , 并在 InterfaceTest 类的 main() 方法中加入 SoundDevice[3]= new Clock(); 语句。

class Clock implements Soundable{

public void Stopsound(){

System.out.println(" 关闭闹钟 ");

}

public void Playsound(){

system.out.println(" 闹钟发出滴答声 ");

   }

}

修改之后 , 重新编译 InterfaceTest.java 并运行它 , 观察结果。

答:报错了,普通类需要实现所有接口的方法。

(4) 在第 (3) 小题中由于新加入的 Clock 类仅仅实现了 Soundable 接口的stopsound() 和 playsound() 方法 , 而 increaseVolume() 和 decreaseVolume() 方法没有实现 , 因此它实质上是一个抽象类 , 而抽象类是不能实例化的 , 所以导致编译错误。但是按照常理 , 闹钟的滴答声确实是不可以增大或减小的 , 那么如何解决这个问题呢 ? 现在请在 Clock 类中加入下面两个含 {} 空方法体的方法实现 , 再编译运行程序 , 看看会有什么变化。

public void increaseVolume(){}

public void decreaseVolume(){}

答:正确了,不会报错。

103ac9228b664d06bc4d75fc140c02d0.png

  1. 现在请模仿本实验的程序设计出一个自己的接口程序 , 要求先设计一个 moveable 可移动接口 , 然后分别设计 3 个类 , 即汽车 Car 、轮船 Ship 、飞机 Aircraft 来实现该接口 , 最后设计一个应用程序来使用它们。

解答如下:

1.创建包并分类完毕:Moveable为接口,Car,Ship与Aircraft为实现类,People为普通类,Test为测试类:

a20c3a3cf62b463e834a78fdc863cf3c.png

2.接口Moveable的代码:

0e3c8a0e886d4f11945f60596176639e.png

3.实现类Car代码:

97f41d965f994002b3f56dde6150b115.png

4.实现类Ship代码:

838749dc1cda47bab4c6bf1cf399cd0d.png

5.实现类Aircraft代码:

2387943d23a94e50a283f0d1e4b48442.png

6.普通类People代码:

6ac56d28137640bfa71e4b30ae07a0a0.png

7.测试类Test代码:

3e3e78acd83e4fda8fdb93d80d8e9c50.png

8.运行结果显示:

7bf17110f4ee496e963af34fa2e9f6fe.png

点评  接口的特点在于只定义能做什么 , 而不定义怎么去做。在本实验中 , 收音机 Radio, 随身听 Walkman 和手机 Mobilephone 分别以自己的方式实现了 Soundable 接口 , 当接口成为 Listen(Soundable s) 方法的形参时 , 任何实现了 Soundable 接口的对象都能成为它的实参 , 如果不用接口作形参 , 那就必须写 3 个不同的方法 , 即

listenRadio(Radio r),

    listenWalkman(Walkman w) ,

listenMobilephone(Mobilephone m)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python游戏开发库:开启游戏编程之旅

引言 Python凭借其简洁明了的语法和丰富的库支持,在游戏开发领域占有一席之地。对于希望进入游戏编程世界的开发者来说,Python提供了一个理想的起点。本文将介绍几个关键的Python游戏开发库,帮助您开启游戏编程之旅。 第一部分:P…

Selenium自动操作鼠标的方法及示例(鼠标左右键单击、左键双击、拖动等)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

【线性系统理论】笔记一

一:状态空间表达式 电路系统状态空间描述列写 1:选取状态变量 状态变量定义:线性无关极大组属性。 2:列出电路原始回路方程 ps:状态变量有两个,理论上需要列写2个方程 3:规范形势 4&#xf…

基于Springboot的知名作家信息管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的知名作家信息管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系…

计算思维的理解

2006年,卡内基梅隆大学周以真教授首次系统性地定义了计算思维。这一年,她在美国计算机权威期刊《Communications of the ACM》上发表了题为《Computational Thinking》的论文,由此开启了计算思维大众化的全新历程。 周以真(Jeanne…

3.3 整型

本节必须掌握的知识点: 整型数据类型的取值范围 示例八 代码分析 汇编解析 获取数据类型的取值范围 3.3.1 整型数据类型取值范围 整型是用来表示限定范围内连续整数的数据类型。表3-1列出了C语言编译器定义的整型数据类型及其大小和取值范围。 类型 存储大小…

三菱FX3U-4AD模拟量电压输入采集实例

硬件:PLC模块 FX3GA-24MT ;A/D模块FX&#xff13…

食品饮料厂做配送小程序的作用是什么

食品饮料厂品牌旗下通常有多个产品类型,多数是以批发为主,也有直营店及线上直播零售等方式,商家如何将品牌宣传和产品销售的更广是需要思考的,其销售模式也多种多样。 私域店铺也是品牌增长的重要方式,在【雨科】平台…

【现代C++】范围库的应用

C20引入了范围库(Ranges library),它是标准模板库(STL)的一个扩展,提供了一种新的方式来处理序列和范围。这个库允许开发者以更声明式的方式编写代码,使得操作序列变得更简洁、更易读。以下是C范…

深入理解 npm、cnpm、npx、yarn 和 pnpm:JavaScript 包管理器的对比

在 JavaScript 的世界中,包管理器是一个重要的工具,它帮助我们管理、安装和升级项目的依赖。在这篇文章中,我们将深入探讨三个最流行的 JavaScript 包管理器:npm、yarn 和 pnpm。 npm(Node Package Manager&#xff0…

电源模块效率的正确测试方法

电源效率是评价电源性能的重要指标,它直接关系到设备的稳定性和能源的利用效率。因此,对电源进行效率测试显得尤为重要。电源在工作过程中,会有部分能量损耗,因此,电源效率的高低,不仅影响着设备的性能&…

VMware虚拟机没有网,无法设置网络为桥接状态

今天需要使用Ubuntu18但现有虚拟机是Ubuntu20,由于硬盘空间不够大,所以删除了原来的虚拟机并重新搭建Ubuntu18的环境,然后发现虚拟机没有网络,而我之前的虚拟机这一切都是正常的。 在网络设置里勾选的是桥接模式但无法联网&#x…

奥维地图下载高清影像的两种方式!以及ArcGIS、QGIS、GlobalMapper、自编工具下载高清影像的方法推荐!

今天来介绍一下奥维互动地图是如何下载高清影像的,也不是多了不起的功能!有朋友问,加上这个软件确实用的人多。 下载的高清数据在ArcGIS中打开的效果! 开始介绍奥维之前我们也介绍一下我们之前介绍的几个方法,没有优劣…

面试加分项:精通Java高并发下的锁优化策略

1. 问题背景与挑战 1.1 并发编程中的挑战 在现代软件开发中,高并发已成为衡量系统质量的一项关键因素,特别是对于那些需要同时处理数以万计甚至百万级用户请求的服务。并发编程的挑战在于如何有效地同步多个线程,确保数据的一致性和系统的稳…

【csv-parse】使用parse方法的时候来转换为csv字符串时,会导致输出有乱码

😁 作者简介:一名大四的学生,致力学习前端开发技术 ⭐️个人主页:夜宵饽饽的主页 ❔ 系列专栏:前端bug记录 👐学习格言:成功不是终点,失败也并非末日,最重要的是继续前进…

针对实拍场景的虚拟试衣模型IDM-VTON:高保真和细节保留的虚拟试穿算法,真实环境效果领先

前言 虚拟试衣是一种将人物图像与服装图像合成,生成人物穿戴目标服装的图像技术。相比传统的GAN方法,基于扩散模型的虚拟试衣方法能够生成更加自然逼真的图像。然而,现有的扩散模型在保留服装细节方面仍存在局限性。 为了解决这一问题&…

Nodejs 第七十一章(libuv)

libuv 在Node.js中,libuv是作为其事件循环和异步I/O的核心组件而存在的。Node.js是构建在libuv之上的,它利用libuv来处理底层的异步操作,如文件I/O、网络通信和定时器等。 libuv在Node.js中扮演了以下几个重要角色: 事件循环&a…

一个panic问题引起对percpu变量的思考

1 问题引入 最近在分析一个panic问题时&#xff0c;发现panic现场无法与log对应起来。 先贴log: <1>[ 180.089084] Unable to handle kernel NULL pointer dereference at virtual address 00000001 <1>[ 180.099551] pgd 8bbde651 <1>[ 180.107775] …

JavaScript进阶——05-迭代器和生成器【万字长文,感谢支持】

迭代器 概念 迭代器&#xff08;Iterator&#xff09;是 JavaScript 中一种特殊的对象&#xff0c;它提供了一种统一的、通用的方式遍历个各种不同类型的数据结构。可以遍历的数据结构包括&#xff1a;数组、字符串、Set、Map 等可迭代对象。我们也可以自定义实现迭代器&…

Python GUI开发- Qt Designer环境搭建

前言 Qt Designer是PyQt5 程序UI界面的实现工具&#xff0c;使用 Qt Designer 可以拖拽、点击完成GUI界面设计&#xff0c;并且设计完成的 .ui 程序可以转换成 .py 文件供 python 程序调用 环境准备 使用pip安装 pip install pyqt5-toolsQt Designer 环境搭建 在pip安装包…