Java实验案例(接口)
实验任务
- 任务一:设计实现发声接口
- 任务二:动物乐园
实验内容
任务一:设计实现发声接口
任务目的:
- 理解并掌握如何定义接口
- 掌握接口的实现方式
任务描述:
设计和实现一个Soundable接口,该接口具有发声功能,同时还能调节声音大小
Soundable接口的这些功能将由有3种声音设备来实现他们分别是Radio、Walkman、
Mobilephone。最后还需设计一个应用程序类来使用这些实现Soundable接口的声音
设备。程序运行时,先询问用户想听那个设备,然后程序按照该设备的工作方式来输
出发音。
实施步骤:
1. 定义 Soundable接口
public interface Soundable {
// 发出声音
public void playSound() ;
// 降低声音
public void decreaseVolume();
// 停止声音
public void stopSound();
}
2. 设计Radio类
public class Radio implements Soundable{
@Override
public void playSound() {
System.out.println("收音机播放广播:中央人民广播电视台。");
}
@Override
public void decreaseVolume() {
System.out.println("降低收音机音量。");
}
@Override
public void stopSound() {
System.out.println("关闭收音机。");
}
}
3. 设计Walkman类
public class Walkman implements Soundable{
@Override
public void playSound() {
System.out.println("随身听发出音乐");
}
@Override
public void decreaseVolume() {
System.out.println("降低随身听音量");
}
@Override
public void stopSound() {
System.out.println("关闭随身听");
}
}
4. 设计MobilePhone类
public class MobilePhone implements Soundable{
@Override
public void playSound() {
System.out.println("手机发出来电铃声:叮当 、 叮当");
}
@Override
public void decreaseVolume() {
System.out.println("降低手机音量");
}
@Override
public void stopSound() {
System.out.println("关闭手机");
}
}
5. 设计SampleDisplay类
class SampleDisplay {
public void display(Soundable soundable) {
soundable.playSound();
soundable.decreaseVolume();
soundable.stopSound();
}
}
6. 测试类
import java.util.Scanner;
public class TestDemo {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("你想听什么?请输入:");
System.out.println("0-收音机 1-随身听 2-手机");
int choice;
choice = in.nextInt();
SampleDisplay sampledisplay = new SampleDisplay();
if (choice == )
sampledisplay.display(new Radio());
else if(choice == )
sampledisplay.display(new Walkman());
else if(choice == )
sampledisplay.display(new MobilePhone());
else
System.out.println("瓜娃,你输错了!");
in.close();
}
}
任务二:动物乐园
任务目的
能够灵活运用接口解决多继承问题
任务描述
编写程序模拟动物园里饲养员给各种动物喂养各种不同食物的过程。当饲养员
给动物喂食时,动物发出欢快的叫声。
实施步骤
在这个动物园里,涉及的对象有饲养员,各种不同动物以及各种不同的食物。这样
很容易抽象出3个类Feeder、Animal和Food。假设只考虑猫科和狗类动物,则由Animal
类派生出Cat类、Dog类、同样由Food类可以进一步派生出其子类Bone、Fish。因为他
们之间存在这明显的is-a关系。
同样鱼是一种食物,但实际上,鱼也是一种动物,Cat类和Dog类继承了Animal的很多
属性和方法,如果将Animal定义为接口,Animal中是不能定义成员变量和成员方法的,Food
类中虽然也有变量但是数量比Animal少,所以我们考虑将Food定义为接口,此时可以说“鱼
是一种动物,同时也是一种食物”。
代码实现:
定义Animal类
public abstract class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public abstract void shout();
public abstract void eat(Food food);
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Animal的子类Cat类
public class Cat extends Animal{
public Cat(String name) {
super(name);
}
public void shout() {
System.out.println("喵呜.....");
}
public void eat(Food food) {
System.out.println(getName() + "正在吃着香喷喷的" + food.getName());
}
}
Animal的子类Dog类
public class Dog extends Animal {
public Dog(String name) {
super(name);
}
@Override
public void shout() {
System.out.println("汪汪汪.....");
}
@Override
public void eat(Food food) {
System.out.println(getName() + "正在啃着香喷喷的" + food.getName());
}
}
定义Food类
public interface Food {
public abstract String getName();
}
Fish类
public class Fish extends Animal implements Food{
public Fish(String name) {
super(name);
}
@Override
public void shout() {
}
@Override
public void eat(Food food) {
}
}
Bone类
public class Bone implements Food{
@Override
public String getName() {
return "bone";
}
}
Feeder类
public class Feeder {
private String name;
public Feeder(String name) {
this.name = name;
}
public void speak() {
System.out.println("欢迎来到动物园!");
System.out.println("我是饲养员 "+getName());
}
public void feed(Animal a, Food food) {
a.eat(food);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试类:
public class TestDemo {
public static void main(String[] args) {
Feeder feeder = new Feeder("花花");
feeder.speak();
Dog dog = new Dog("小布丁");
Food food = new Bone();
feeder.feed(dog, food);
Cat cat = new Cat("小猫崽");
food = new Fish("黄花鱼");
feeder.feed(cat, food);
}
}
Java实验案例(接口)的更多相关文章
- Java 实验案例(多态)
实验任务 任务一:图形面积周长计算小程序 任务二:饲养员喂养动物程序 实验内容: 任务一: 图形面积周长计算 任务目的: 掌握多态的含义及应用场合 掌握上转型对象和多态的实现 掌握abstract关键 ...
- Java 实验案例(类和对象篇)
实验任务 任务一:手机类的封装 任务二:基于控制台的购书系统 任务三:简单的投票程序 实验内容 任务一:手机类的封装 任务目的 理解和掌握面向对象的设计过程 掌握类的结构和定义过程 掌握构造方法及其重 ...
- Java常用函数式接口--Consumer接口andThen()方法使用案例(二)
Java常用函数式接口--Consumer接口使用案例
- Java常用函数式接口--Predicate接口使用案例
Java常用函数式接口--Predicate接口使用案例 该方法可以使用and来优化: 调用:
- Java实验二20135104
课程:Java程序设计 班级: 1351 姓名:刘帅 学号:20135104 成绩: 指导教师:娄嘉鹏 实验日期:2 ...
- Java实验报告二:Java面向对象程序设计
Java实验报告二:Java面向对象程序设计 ...
- 20175212童皓桢 Java实验二-面向对象程序设计实验报告
20175212童皓桢 Java实验二-面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设 ...
- Java实验报告(实验二)
课程:Java程序设计 班级: 1351 姓名:王玮怡 学号:20135116 成绩: 指导教师:娄嘉鹏 实验日期: ...
- java实现Comparable接口和Comparator接口,并重写compareTo方法和compare方法
原文地址https://segmentfault.com/a/1190000005738975 实体类:java.lang.Comparable(接口) + comareTo(重写方法),业务排序类 ...
随机推荐
- 【xsy1197】 树 二分+点分树+二分
题目大意:给你一棵$n$个点的带权树和正整数$K$,求每个点到其它所有点距离中第$K$大的数值. 其中,边权$≤10000$,$n≤50000$. 我们通过原树构建一棵点分治树,令$fa[u]$为$u ...
- h5仿微信、支付宝数字键盘|微信支付键盘|支付宝付款键盘
html5仿微信支付数字键盘|仿支付宝键盘|h5仿微信密码输入键盘|自定义数字键盘 很早之前由于项目需求,就有开发过一个h5仿微信支付键盘,这几天就把之前的数字键盘模块独立出来,重新整理开发成demo ...
- C# 连接Paradox DB
Paradox数据库是一个成名于15年前的数据库,那时候Borland公司还存在.最近客户提出需求,要在一套用了12年+的应用程序上作些功能更改.这套应用程序使用Delphi+Paradox数据库. ...
- node服务端搭建学习笔记
咳咳,终于迈出这一步了...这篇文章将是边学边写的真正笔记...用于mark下学习过程中的点滴~ 开篇先把我学习参考的文章来源给出,以表示对前人的尊敬: https://github.com/nswb ...
- 关于 AXI协议的学习解释说明
AXI(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture ...
- MapReduce几种提交方式
本地模式运行 1.在Windows里的IDE直接运行main方法,会将job提交给本地执行器localjobrunner执行 ---本地存放Hadoop安装包 ---输入输出数据可以放在本地路径下(c ...
- 做网站,乱码?应该选用什么编码?GB2312 ? UTF-8 ?
当然了,最常用的编码也就是GB2312 和 UTF-8 了. ================================================起==================== ...
- C#语法之委托和事件
从大学就开始做C#这块,也做C#几年了,最近又从ios转回.Net,继续做C#,之前也没有写博客的习惯,写博客也是从我做ios的时候开始的,现在既然又做回了.net,那就写点关于.Net的博客,可能在 ...
- javaScript中用eval()方法转换json对象
var u = eval('('+user+')'); 1.对于服务器返回的JSON字符串,如果jQuery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将 ...
- [转]ASP.NET Core配置环境变量和启动设置
本文转自:https://www.cnblogs.com/tdfblog/p/Environments-LaunchSettings-in-Asp-Net-Core.html 在这一部分内容中,我们来 ...