实验任务java
实验内容ide
任务一:设计实现发声接口测试
任务目的:this
任务描述:spa
设计和实现一个Soundable接口,该接口具备发声功能,同时还能调节声音大小设计
Soundable接口的这些功能将由有3种声音设备来实现他们分别是Radio、Walkman、code
Mobilephone。最后还需设计一个应用程序类来使用这些实现Soundable接口的声音对象
设备。程序运行时,先询问用户想听那个设备,而后程序按照该设备的工做方式来输blog
出发音。继承
实施步骤:
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 == 0) sampledisplay.display(new Radio()); else if(choice == 1) sampledisplay.display(new Walkman()); else if(choice == 2) 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); } }