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 == 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); }
} --------------------- 作者:omgleoo 來源:CSDN 原文:https://blog.csdn.net/badguy_gao/article/details/78638750 版權宣告:本文為博主原創文章,轉載請附上博文連結!