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()方法,输出猫和狗的名字、叫声以及相应的行为。

源代码:
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.mzph.cn/web/32637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink SQL因类型错误导致MAX和MIN计算错误

背景 最近在做数据分析,用Flink SQL来做分析工具,因数据源的数据存在不太规范的数据格式,因此我需要通过SQL函数把我需要的数据值从VARCHAR类型的字段中把数据提取出来,然后再做MAX、MIN、SUM这些统计。怎料SUM算出来的结果准确无误,而MAX和MIN算出来的结果却始终不正确,…

尹会生:从零开始部署翻译助手【总结】

安装docker安装dify 工具准备 Docker 简介:可以在不同电脑上运行相同的容器,类似于把软件装在便携箱子里,随身携带。 优点:安装Docker可以简化部署过程,避免安装许多依赖性软件。 网址:https://www.docke…

【TOOL】ceres学习笔记(二) —— 自定义函数练习

文章目录 一、曲线方程1. 问题描述2. 实现方案 一、曲线方程 1. 问题描述 现有数学模型为 f ( x ) A e x B s i n ( x ) C x D f(x)Ae^xBsin(x)Cx^D f(x)AexBsin(x)CxD ,但不知道 A A A 、 B B B 、 C C C 、 D D D 各参数系数,实验数据中含有噪声…

基于Java作业管理系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

Java——集合(一)

前言: Collection集合,List集合 文章目录 一、Collection 集合1.1 集合和数组的区别1.2 集合框架1.3 Collection 集合常用方法1.4 Collction 集合的遍历 二、List 集合2.1 List 概述2.2 List集合的五种遍历方式2.3 List集合的实现类 一、Collection 集合 1.1 集合和…

Vitis Accelerated Libraries 学习笔记--OpenCV 安装指南

目录 1. 简介 2. 安装过程 2.1 安装准备 2.2 编译并安装 XRT 2.2.1 下载 XRT 源码 2.2.2 安装依赖项 2.2.3 构建 XRT 2.2.4 打包 DEB 2.2.5 安装 XRT 2.3 编译并安装 OpenCV 2.3.1 下载 OpenCV 源码 2.3.2 创建目录 2.3.3 设置环境变量 2.3.4 构建 opencv 3. 总…

java技术专家面试指南80问【java学习+面试宝典】(八)

什么是spring? Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。 Spring事务管理的方式有…

ping命令返回结果实例分析

测试在各相关情况下ping命令回复信息。 网络环境搭建如下图所示: 【1】R1、R2、PC1和PC2没有配置,测试ping命令回复 在路由器没有配置端口IP地址和路由,PC没有配置IP地址、子网掩码和网关的情况下,PC2 ping 192.168.1.1。 在PC没…

加速鸿蒙生态共建,蚂蚁mPaaS助力鸿蒙原生应用开发创新

6月21日-23日,2024华为开发者大会(HDC 2024)如期举行。在22日的【鸿蒙生态伙伴SDK】分论坛中,正式发布了【鸿蒙生态伙伴SDK市场】,其中蚂蚁数科旗下移动开发平台mPaaS(以下简称:蚂蚁mPaaS&#…

从零开始精通Onvif之音视频流传输

💡 如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。 概述 Onvif协议的核心作用之一,是定义了如何通过网络访问和控制IP摄像机和其他视频设备。Onvif协议不仅涉及设备发现、设备管理&…

QtCreator/VS中制作带有界面的动态库

1、首先创建动态库项目 class UNTITLED25_EXPORT Untitled25 {public:Untitled25(); };2、直接右键创建同名窗口类进行覆盖 3、引入global头文件并添加到处宏</

【SSM】

Spring常见面试题总结 Spring 基础 什么是 Spring 框架? Spring 是一款开源的轻量级 Java 开发框架&#xff0c;旨在提高开发人员的开发效率以及系统的可维护性。 我们一般说 Spring 框架指的都是 Spring Framework&#xff0c;它是很多模块的集合&#xff0c;使用这些模块…

逆向学习数据库篇:表设计和数据库操作的核心概念与流程

本节课在线学习视频&#xff08;网盘地址&#xff0c;保存后即可免费观看&#xff09;&#xff1a; ​​https://pan.quark.cn/s/d020891757ac​​ 在数据库管理中&#xff0c;表设计和数据库操作是两个核心环节。表设计决定了数据的组织和存储方式&#xff0c;而数据库操作则…

国内云服务购买汇总

大厂 阿里云腾讯云华为云天翼云移动云AWS百度云火山引擎金山云京东云有道智云UCloud青云七牛云又拍云LeanCloud 聊天 融云环信 AI算力 AutoDL无问芯穹 其它领域 极光推送有赞云DaoCloudmemfire cloudAuthing

转让神州开头的无区域科技公司需要多少钱

您好&#xff0c;我公司现有2家无区域神州名称的公司转让。所谓无区域名称是公司名称中不带有行政区划、及行业特点的公司名称&#xff0c;都是需要在工商总,局核准名称的&#xff0c;对于民营企业来说也比较喜欢这种名称名称很大气&#xff0c;现在重核更严格了&#xff0c;所…

【SQL】count(1)、count(*) 与 count(列名) 的区别

在 SQL 中&#xff0c;COUNT 函数用于计算查询结果集中的行数。COUNT(1)、COUNT(*) 和 COUNT(列名) 都可以用来统计行数&#xff0c;但它们在实现细节和使用场景上有一些区别。以下是详细的解释&#xff1a; 1. COUNT(1) 定义: COUNT(1) 计算查询结果集中的行数。实现: 在执行…

淘客返利系统架构设计:从零到上线

淘客返利系统架构设计&#xff1a;从零到上线 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来探讨如何设计一个淘客返利系统&#xff0c;从零到上线的…

0基础前端视频教程 下载

0基础前端视频教程 下载 下载地址 https://download.csdn.net/download/m0_67912929/89471104 ├─01、Js基础 │ ├─01 │ │ │ 03-code.zip │ │ │ │ │ ├─01-课堂PPT │ │ │ JavaScript基础第一天.pdf │ │ │ JavaScript基础第一…

Docker如何安装redis

目录 1. 拉取redis的镜像文件 2. 创建redis的容器卷 3. 准备reids的配置文件 4. 以配置文件启动redis 1. 拉取redis的镜像文件 # 默认安装最新版本 如果需要指定版本 docker pull redis:版本号 docker pull redis 详细版本请看dockerhub的官网&#xff1a; hub.docker…

JAVA如何将图片插入word文档且不破坏原有格式,设置图片悬浮与文字之上

首先需要引入俩东西 <repositories><repository><id>com.e-iceblue</id><name>e-iceblue</name><url>https://repo.e-iceblue.com/nexus/content/groups/public/</url></repository><dependency><groupId>e…