1. 程式人生 > >Java實驗案例(介面)

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 版權宣告:本文為博主原創文章,轉載請附上博文連結!