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

embedded/2024/10/20 23:38:51/
题目:

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

        编写接口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{@Overridepublic void cry() {System.out.println("喵喵喵~"); // 输出猫的叫声}@Overridepublic String getAnimalName() {return "小猫 "; // 返回猫的名字}public static void climbTree(){System.out.println("小猫爬树"); // 输出猫爬树的行为}}package Question8;
// 定义一个Dog类,实现Animal接口
public class Dog implements Animal {@Overridepublic void cry() {System.out.println("汪汪汪~"); // 输出狗的叫声}@Overridepublic 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`类的实例。


http://www.ppmy.cn/embedded/51254.html

相关文章

qmt量化交易策略小白学习笔记第41期【qmt编程之期货数据--如何获取当前主力合约】

qmt编程之获取期货数据 qmt更加详细的教程方法,会持续慢慢梳理。 也可找寻博主的历史文章,搜索关键词查看解决方案 ! 感谢关注,咨询免费开通量化回测与获取实盘权限,欢迎和博主联系! 获取当前主力合约 …

[Qt的学习日常]--窗口

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、窗口的分…

C#的膨胀之路:创新还是灭亡

开篇概述 C#,这门由微软推出的编程语言,自2000年诞生以来,以其简洁的语法、强大的功能和广泛的应用场景,赢得了我等程序员的热爱。它在.NET框架的加持下,展现出无与伦比的开发效率和性能。然而,随着时间的流…

STM32高级控制定时器(STM32F103):计数模式

目录 概述 1 计数模式介绍 2 加计数模式 2.1 加计数模式介绍 2.2 计数序列案例 3 减计数模式 3.1 减计数模式介绍 3.2 应用实例 4 居中对齐模式(向上/向下计数) 4.1 功能介绍 4.2 应用实例 概述 本文主要介绍STM32F10X定时器计数功能的相关知…

LeetCode 100342. 最小元素和最大元素的最小平均值

更多题解尽在 https://sugar.matrixlab.dev/algorithm 每日更新。 组队打卡,更多解法等你一起来参与哦! LeetCode 100342. 最小元素和最大元素的最小平均值,难度简单。 排序 解题思路:排序后取每次取数组首尾节点,求…

数据结构:第三讲 树(上)小测验:树的遍历

如何确定树: (1)先序后序定根 (2)利用根在中序中分左右子树 (3)递推

做自媒体素材网站有哪些?做自媒体的视频素材网站分享

在数字化和视觉内容不断革新的今天,寻找到匹配自己创意需求的素材是每位自媒体人的关键步骤。一张精美的图片或一段生动的视频,能够显著提升内容的吸引力并准确传达创作者的信息。本文将为广大自媒体创作者推荐几个必备的素材网站,助您轻松找…

Spring-bean

Spring 网站:spring.io 两个方面: 简化开发: IoCAOP 框架整合: MyBatis SpringFrameWork系统架构(上层依赖下层) 解决问题(代码耦合度高——模块与模块之间的依赖程度) 目标&am…