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)。

  • 15
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在这个实验中,主要涉及到了Java中的接口抽象类的概念和使用。引用\[1\]中给出了一个名为StudentInterface的接口类,其中定义了两个方法setFee()和getFee(),用于设置和获取学费。引用\[2\]中描述了一个实验的目的和内容,其中涉及到了设计一个扩展自抽象类GeometricObject的Triangle类,并实现该类。同时还需要编写一个测试程序,根据用户的输入创建一个Triangle对象,并显示其面积、周长、颜色以及是否被填充。引用\[3\]中定义了一个抽象类Shape,其中包含一个抽象方法getArea(),并从Shape类派生出了Rectangle和Circle类,这两个类都实现了getArea()方法来计算对象的面积。整个实验的目的是通过设计和使用抽象类和接口,理解接口继承和多态的概念,并进行相应的编程实现。 #### 引用[.reference_title] - *1* *3* [Java基础 实验抽象类和接口](https://blog.csdn.net/y_dd6011/article/details/86372416)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java实验8《抽象类和接口》](https://blog.csdn.net/qq_39564555/article/details/97267562)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡林神不是猫

如果您觉得有帮助可以鼓励小卡哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值