Java程序之动物声音“模拟器”

题目:

设计一个"动物模拟器",希望模拟器可以模拟许多动物的叫声和行为,要求如下:

编写接口Animal,该接口有两个抽象方法cry()和getAnimalName(),即要求实现该接口的各种具体的动物类给出自己的叫声和种类名称。

编写模拟器类Simulator,该类实现了sound(Animal animal)方法和display(Animal animal)方法,其中sound(Animal animal)方法的参数是Animal类型,即参数animal可以调用实现Animal接口类重写的cry()方法播放具体动物的声音,调用重写的getAnimalName()方法显示动物种类的名称。display(Animal animal)方法的参数是Animal类型,根据传入的参数模拟动物的各种行为:小猫爬树,小狗啃骨头等。

编写实现Animal接口的Dog类和Cat类。定义一个小猫类Cat,该类实现了Animal接口并实现了cry()方法,当调用cry()方法时打印"小猫喵喵叫",该类自定义了climbTree()方法,当调用此方法时打印"小猫爬树"。定义一个小狗类Dog,该类也继承了Animal类并实现了cry()方法,当调用cry()方法时打印"小狗汪汪叫",该类自定义了pickBone()方法,当调用此方法时打印"小狗啃骨头"。编写测试类输出实验结果。

算法思路:
  1. 定义Animal接口,包含两个方法:cry()和getAnimalName()。这两个方法分别用于输出动物的叫声和获取动物的名字。

  2. 定义Cat类,实现Animal接口,重写cry()和getAnimalName()方法。在cry()方法中输出"喵喵喵~",在getAnimalName()方法中返回"小猫"。同时定义了一个静态方法climbTree(),用于输出"小猫爬树"。

  3. 定义Dog类,实现Animal接口,重写cry()和getAnimalName()方法。在cry()方法中输出"汪汪汪~",在getAnimalName()方法中返回"小狗"。同时定义了一个静态方法pickBone(),用于输出"小狗啃骨头"。

  4. 定义Simulator类,包含两个方法:sound()和display()。

  5. 在sound()方法中,接收一个Animal类型的参数,输出动物的名字和叫声。首先调用getAnimalName()方法获取动物的名字,然后调用cry()方法输出动物的叫声。

  6. 在display()方法中,接收一个Animal类型的参数,根据动物的类型执行相应的行为。如果传入的动物是Cat类型,则调用Cat类的climbTree()方法输出"小猫爬树";如果传入的动物是Dog类型,则调用Dog类的pickBone()方法输出"小狗啃骨头"。

  7. 在Main类的main()方法中,创建Simulator对象,调用sound()和display()方法模拟猫和狗的行为。首先创建一个Cat对象和一个Dog对象,然后分别调用Simulator对象的sound()和display()方法,输出猫和狗的名字、叫声以及相应的行为。

源代码:
java 复制代码
package Question8;
// 定义一个Animal接口,包含两个方法:cry()和getAnimalName()
public interface Animal {
    void cry(); // 叫声方法
    String getAnimalName() ; // 获取动物名字方法
}


package Question8;
// 定义一个Cat类,实现Animal接口
public class Cat implements Animal{
    @Override
    public void cry() {
        System.out.println("喵喵喵~"); // 输出猫的叫声
    }

    @Override
    public String getAnimalName() {
        return "小猫 "; // 返回猫的名字
    }

    public static void climbTree()
    {
        System.out.println("小猫爬树"); // 输出猫爬树的行为
    }

}

package Question8;
// 定义一个Dog类,实现Animal接口
public class Dog implements Animal {
    @Override
    public void cry() {
        System.out.println("汪汪汪~"); // 输出狗的叫声
    }

    @Override
    public String getAnimalName() {
        return "小狗 "; // 返回狗的名字
    }

    public static void pickBone()
    {
        System.out.println("小狗啃骨头"); // 输出狗啃骨头的行为
    }
}

package Question8;
// 定义一个Simulator类,用于模拟动物的行为
public class Simulator{
    public void sound(Animal animal)
    {
        System.out.print(animal.getAnimalName()); // 输出动物的名字
        animal.cry(); // 调用动物的叫声方法
    }
    public void display(Animal animal)
    {
        if(animal instanceof Cat) // 如果传入的动物是猫
        {
            Cat cat=(Cat)animal; // 将animal强制转换为Cat类型
            cat.climbTree(); // 调用猫的爬树方法
        }
        else if(animal instanceof Dog) // 如果传入的动物是狗
        {
            Dog dog=(Dog)animal; // 将animal强制转换为Dog类型
            dog.pickBone(); // 调用狗啃骨头方法
        }
    }
}

package Question8;
// 定义一个Main类,包含main方法作为程序入口
public class Main {
    public static void main(String[] args) {
        Simulator simulator=new Simulator(); // 创建一个Simulator对象
        simulator.sound(new Cat()); // 调用sound方法,传入一个Cat对象,输出猫的名字和叫声
        simulator.display(new Cat()); // 调用display方法,传入一个Cat对象,执行猫的爬树行为
        System.out.println("------------"); // 输出分隔线
        simulator.sound(new Dog()); // 调用sound方法,传入一个Dog对象,输出狗的名字和叫声
        simulator.display(new Dog()); // 调用display方法,传入一个Dog对象,执行狗啃骨头行为
        System.out.println("------------"); // 输出分隔线
    }
}
运行结果:

注:

`instanceof`是用于检查一个对象是否属于某个类或接口的实例。在这个例子中,`animal instanceof Cat`表示检查`animal`对象是否是`Cat`类的实例,如果是,则执行大括号内的代码。同样,`animal instanceof Dog`表示检查`animal`对象是否是`Dog`类的实例。

相关推荐
一定要AK2 小时前
Spring 入门核心笔记
java·笔记·spring
A__tao2 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
KevinCyao2 小时前
java视频短信接口怎么调用?SpringBoot集成视频短信及回调处理Demo
java·spring boot·音视频
迷藏4942 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
wuxinyan1233 小时前
Java面试题47:一文深入了解Nginx
java·nginx·面试题
新知图书3 小时前
搭建Spring Boot开发环境
java·spring boot·后端
冰河团队3 小时前
一个拉胯的分库分表方案有多绝望?整个部门都在救火!
java·高并发·分布式数据库·分库分表·高性能
洛_尘3 小时前
Java EE进阶:Linux的基本使用
java·java-ee
宸津-代码粉碎机3 小时前
Spring Boot 4.0虚拟线程实战调优技巧,最大化发挥并发优势
java·人工智能·spring boot·后端·python
MaCa .BaKa3 小时前
47-心里健康咨询平台/心理咨询系统
java·spring boot·mysql·tomcat·maven·intellij-idea·个人开发