zoukankan      html  css  js  c++  java
  • Java实验案例(接口)

    实验任务

    • 任务一:设计实现发声接口
    • 任务二:动物乐园

    实验内容

    任务一:设计实现发声接口

    任务目的:

    1. 理解并掌握如何定义接口
    2. 掌握接口的实现方式

    任务描述:

      设计和实现一个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);
        }
    
    }
  • 相关阅读:
    BZOJ1452 count (树状数组)
    splay
    CODEVS1222 信与信封问题 (匈牙利算法)
    CODEVS1022 覆盖 (二分图染色+匈牙利算法)
    反思——针对作业的反思
    学习进度
    软件工程个人作业01
    阅读笔记
    安装SQL Server 2014
    软件工程概论_作业01
  • 原文地址:https://www.cnblogs.com/yoke/p/7521068.html
Copyright © 2011-2022 走看看