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

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

源代码:
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`类的实例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1852556.html

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

相关文章

PostgreSQL如何定义缓冲区管理器?

目录 一、PostgreSQL是什么二、缓冲区管理器介绍三、缓冲区管理器的应用场景四、如何定义缓冲区管理器 一、PostgreSQL是什么 PostgreSQL是一种高级的开源关系型数据库管理系统(RDBMS),它以其稳定性、可靠性和高度可扩展性而闻名。它最初由加…

史上最强面试题,拿大厂京东,阿里offer全靠它。程序员必看。

答:对于short s1 1; s1 s1 1;由于1是int类型,因此s11运算结果也是int 型,需要强制转换类型才能赋值给short型。而short s1 1; s1 1;可以正确编译,因为s1 1;相当于s1 (short)(s1 1);其中有隐含的强制类型转换。 #6、Java 有…

Trimesh介绍及基本使用

Trimesh介绍及基本使用 Trimesh是一个纯Python 工具库(支持3.7版本以上),用于加载和使用三角形Mesh网格,支持多种常见的三维数据格式,如二进制/文本格式的STL、Wavefront OBJ、二进制/文本格式的PLY、GLTF/GLB 2.0、3…

食谱API

在当今追求健康与美味完美结合的时代,获取准确而丰富的食品和营养信息变得至关重要。无论是热衷于探索世界各地美食的烹饪爱好者,还是对自身饮食营养严格把控的健康追求者,都离不开可靠的资源。幸运的是,现在有诸如 TheMealDB 和 …

测试辅助工具(抓包工具)的使用2 之 抓包工具的基本用法

1.过滤设置: Filters- --- 勾选use Filters- --- 下拉选择show only the following hosts ---- 输入域名或者ip地址(多个地址用;隔开) --- 点击action(Run filterset now) 2.删除数据 方式一:点击Remove all 方式二: 黑窗口输入cls,回车 删除一条数据:选中数据---右键选择Rem…

LabVIEW电路板故障诊断系统

基于LabVIEW软件开发的电路板故障诊断系统,涵盖功能测试、性能测试和通讯测试等多个方面。系统集成了多种硬件设备,包括NI PXI-1033机箱、NI PXI-4071数字万用表、NI PXI-4130电源模块、NI PXI-8512 CAN模块等,通过模块化设计实现了对电路板的…

Tortoise 删除文件

1、右击需要删除的文件,选择Delete 2、提交

0基础学习线段树

前言: 线段树:用树来表示一个一个的线段区间。 1、为什么要使用线段树? 题目:给定一个数组nums,我们有两种下面两种操作 1、查询nums数组下标i到下标j的和; 2、将nums数组指定下标的值改为指定的一个新…

screenshot-to-code之安装、测试

准备 GPT收费账号 screenshot-to-code Supported AI models: GPT-4O - Best model!GPT-4 Turbo (Apr 2024)GPT-4 Vision (Nov 2023)Claude 3 SonnetDALL-E 3 for image generation git或者手动 下载源代码 https://github.com/abi/screenshot-to-code pip install poetry (…

【图像识别系统】昆虫识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50

一、介绍 昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集(‘蜜蜂’, ‘甲虫’, ‘蝴蝶’, ‘蝉’, ‘蜻蜓’, ‘蚱蜢’, ‘蛾’, ‘蝎子’, ‘…

ROS话题通信机制实操C++

ROS话题通信机制实操C 创建ROS工程发布方(二狗子)订阅方(翠花)编辑配置文件编译并执行注意订阅的第一条数据丢失 ROS话题通信的理论查阅ROS话题通信流程理论 在ROS话题通信机制实现中,ROS master 不需要实现,且连接的建立也已经被封装了,需要…

反馈时延与端到端拥塞控制

先从 越来越无效的拥塞控制 获得一个直感。 开局一张图,剩下全靠编。这是一道习题: 这图来自《高性能通信网络(第二版)》,2002 年的书,很好很高尚,目前这种书不多了。不准备做这道题,但意思要明白&#x…

Redis学习|Redis基础知识、Redis五大数据类型、Redis三种特殊数据类型、Redis事务

Redis基础知识 redis默认有16个数据库,并且这个数量可以在conf配置文件中更改 默认使用的是第0个 可以使用 select 进行切换数据库! key *查看数据库所有的key 清除当前数据库 flushdb 清除全部数据库的内容FLUSHALL 为什么redis是6379!(了解一下即可!) Redis 是…

关于笔记本电脑连接电源时触摸板失灵、卡顿、乱飘的问题

目录 前言 问题原因 解决方法 前言 我查阅了相关的资料和方法如下(很感谢这位楼主大佬提供的问题所在): 问题原因 解决方法 那么解决方法无非就是几种(方法仅供参考,不排除一些危险性): 1…

微信公众号 H5授权登录实现(最详细)

一、微信公众号 (一)基础信息 微信授权类型 自己的网站、APP等第三方,要实现接入微信授权登录,有多种方式:微信公众号(网页)、微信小程序、微信开放平台(APP)等等。 【…

什么是标准差和方差

标准差是用于衡量数字是如何分布的指标。用σ (sigma)表示。 标准差方差的平方根。 什么是方差 方差就是与均值的平方差的平均值。方差的计算过程: 计算平均值(mean)用μ /读mu/表示。用每一个数减去平均值&#xf…

Java基础的重点知识-04-封装

文章目录 面向对象思想封装 面向对象思想 在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。 面向对象思想的三大基本特征: 封装、继承、多态 1.类和对象 类是对象的抽象&#xff…

FreeCAD中类型机制研究

了解FreeCAD类型机制实现原理,为后续FreeCAD相关工作提供参考。 1.实现原理 FreeCAD系统提供一个最上层的基类BaseClass,该类主要处理类型相关工作,几乎所有的FreeCAD的类直接或间接继承于该类。该类只有唯一个属性Type,Type里面…

如何提升外链网站的收录率?

要提高外链网站的收录率,要明确的一点是,被收录的外链才能发挥最大的作用,因此,提升收录率是首要任务。一个有效的方法是使用GPC爬虫池,这样可以大幅度提高谷歌蜘蛛对众多外链网站页面的抓取频率 通过GPC爬虫池的引导…

OpenSSL命令手册

正文共:999 字 10 图,预估阅读时间:1 分钟 我们前面编译安装了OpenSSL命令工具(CentOS编译安装OpenSSL 3.3.1),这是一个强大的安全套接字层密码库,可以用于实现各种加密和认证协议,如…