實驗任務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); } }