当前位置: 首页 > news >正文

【精选】java多态进阶——多态练习测试

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

目录

代码需求

画图

代码练习

代码优化


代码需求

根据需求完成代码:1.定义狗类属性:年龄,颜色行为:eat(String something)(something表示吃的东西)看家lookHome方法(无参数)2.定义猫类属性:年龄,颜色行为:eat(String something)方法(something表示吃的东西)逮老鼠catchMouse方法(无参数)3.定义Person类//饲养员属性:姓名,年龄行为:keepPet(Dog dog,String something)方法功能:喂养宠物狗,something表示喂养的东西行为:keepPet(Cat cat,String something)方法功能:喂养宠物猫,something表示喂养的东西生成空参有参构造,set和get方法  4.定义测试类(完成以下打印效果):keepPet(Dog dog,String somethind)方法打印内容如下:年龄为30岁的老王养了一只黑颜色的2岁的狗2岁的黑颜色的狗两只前腿死死的抱住骨头猛吃keepPet(Cat cat,String somethind)方法打印内容如下:年龄为25岁的老李养了一只灰颜色的3岁的猫3岁的灰颜色的猫眯着眼睛侧着头吃鱼5.思考:    1.Dog和Cat都是Animal的子类,以上案例中针对不同的动物,定义了不同的keepPet方法,过于繁琐,能否简化,并体会简化后的好处?2.Dog和Cat虽然都是Animal的子类,但是都有其特有方法,能否想办法在keepPet中调用特有方法?

画图

代码练习

父类:Animal

package demon8;public class Animal {
//    属性:
//    年龄,颜色
//    行为:
//    eat(String something)方法(something表示吃的东西)private int age;private String color;public Animal() {}public Animal(int age, String color) {this.age = age;this.color = color;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public void eat(String something){System.out.println("动物在吃" + something);}
}

子类:Dog

package demon8;public class Dog extends Animal{
//    属性:
//    年龄,颜色
//    行为:
//    eat(String something)(something表示吃的东西)
//    看家lookHome方法(无参数)public Dog() {}public Dog(int age, String color) {super(age, color);}//    行为:
//    eat(String something)(something表示吃的东西)
//    看家lookHome方法(无参数)@Overridepublic void eat(String something) {System.out.println(getAge() + "岁的" + getColor() +"的狗两只前腿死死的抱住"+ something +"猛吃");}public void lookhome(){System.out.println("狗在看家");}}

子类:Cat

package demon8;public class Cat extends Animal{public Cat() {}public Cat(int age, String color) {super(age, color);}//    行为:
//    eat(String something)方法(something表示吃的东西)
//    逮老鼠catchMouse方法(无参数)@Overridepublic void eat(String something) {System.out.println(getAge() + "岁的"+ getColor() +"的猫眯着眼睛侧着头吃" + something);}public void catchMouse(){System.out.println("猫在逮老鼠");}}

单独的一个类:person

package demon8;import sun.management.counter.perf.PerfInstrumentation;public class person {
//    属性:
//    姓名,年龄
//    行为:
//    keepPet(Dog dog,String something)方法
//    功能:喂养宠物狗,something表示喂养的东西
//    行为:
//    keepPet(Cat cat,String something)方法
//    功能:喂养宠物猫,something表示喂养的东西
//    生成空参有参构造,set和get方法
//  4.定义测试类(完成以下打印效果):
//    keepPet(Dog dog,String somethind)方法打印内容如下:
//    年龄为30岁的老王养了一只黑颜色的2岁的狗
//      2岁的黑颜色的狗两只前腿死死的抱住骨头猛吃
//    keepPet(Cat cat,String somethind)方法打印内容如下:
//    年龄为25岁的老李养了一只灰颜色的3岁的猫
//      3岁的灰颜色的猫眯着眼睛侧着头吃鱼private String name;private int age;public person(){}public person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
//    keepPet(Dog dog,String somethind)方法打印内容如下:
//    年龄为30岁的老王养了一只黑颜色的2岁的狗
//      2岁的黑颜色的狗两只前腿死死的抱住骨头猛吃
//    keepPet(Cat cat,String somethind)方法打印内容如下:
//    年龄为25岁的老李养了一只灰颜色的3岁的猫//饲养狗public void keeppet(Dog dog,String something){System.out.println("年龄为"+age+"岁的"+name+"养了一只"+dog.getColor()+"颜色的"+dog.getAge()+"岁的狗");dog.eat(something);}//饲养猫public void keeppet(Cat cat,String something){System.out.println("年龄为"+age+"岁的"+name+"养了一只"+cat.getColor()+"颜色的"+cat.getAge()+"岁的狗");cat.eat(something);}}

测试类:test

package demon8;public class test {public static void main(String[] args) {//创建对象并调用方法person p1 = new person("老王",30);Dog d = new Dog(3,"黑颜色");p1.keeppet(d,"骨头");person p2 = new person("老李",28);Cat c = new Cat(3,"灰颜色");p2.keeppet(c,"鱼");}
}

代码优化

person类:这样写就可以简化代码,比如有各种动物,我们这里就可以更加简便

        public void keeppet(Animal a,String something) {//强转if (a instanceof Dog d){System.out.println("年龄为" + age + "岁的" + name + "养了一只" + d.getColor() + "颜色的" + d.getAge() + "岁的狗");d.eat(something);} else if (a instanceof Cat c) {System.out.println("年龄为" + age + "岁的" + name + "养了一只" + c.getColor() + "颜色的" + c.getAge() + "岁的狗");c.eat(something);}else {System.out.println("没有这种动物");}}

test测试类:我们发现person类改变后,我们这里的测试类的代码包容性更加强

        person p = new person("老王",30);Dog d = new Dog(2,"黑色");Cat c = new Cat(3,"灰色");p.keeppet(d,"骨头");p.keeppet(c,"鱼");

相关文章:

【精选】java多态进阶——多态练习测试

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏…...

Git详细讲解

文章目录 一、Git相关概念二、本地分支中文件的添加 、提交2.1 文件状态2.2 创建Git仓库2.2.1 git init2.2.2 git clone 2.3 添加操作(git add)2.4 提交操作(git commit)2.5 撤销操作2.5.1 撤销 add操作2.5.2 撤销 commit操作2.5.3 覆盖上一次的commit操…...

k8s弃用docker后使用ctr导入镜像

很多公司的k8s安装比较早,在生产环境一般很少升级,因此还是老版本,在使用新版本的时候,容易陷入老版本的思维中,从而掉坑,这里记录一下整个排查过程,希望对遇到类似的同学起到一定的帮助。 k8s 抛弃弃用docker 学习容器技术的过程中,我看到有不少同学留言问 Kubernet…...

mxxWechatBot开发中..

大家伙,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 免责声明:该工具仅供学习使用,禁止使用该工具从事违法活动,否则永久拉黑封禁账号!!!本人不对任何工具的使用负责&am…...

C#系列-C#log4net日志保存到文件(15)

在C#中使用log4net将日志保存到文件是一个常见的做法。log4net是一个功能强大的日志记录框架,它允许你配置日志的输出格式、级别、目标(例如文件、控制台、数据库等)等。 下面是如何配置log4net以将日志保存到文件的基本步骤: 安…...

linux 08 文件查找

02. 第一. alias:起别名(可以输入别名就可以执行对应的命令),语法:alias 别名‘ls -l’ 第二. locate: locate 找不到最近的文件 更新locate 后 find命令: find: find 路径 选项 文件名&#x…...

【Java面试】数据类型常见面试题

什么是包装类型 将基本类型包装进了对象中得到的类型 基本类型和包装类型有什么区别 用途不同:基本类型一般用于局部变量,包装类型用于其他地方存储方式不同:用于局部变量的基本类型存在虚拟机栈中的局部变量表中,用于成员变量…...

unity学习案例总结

动态标签 GitHub - SarahMit/DynamicLabel3D: Simple dynamic labels for a 3D Unity scene...

Halcon 频域缺陷检测

文章目录 傅里叶变换频谱矩形圆菱形黑白相间的亮带去除图纹(反傅里叶变换)去除图纹滤波器处理 Halcon 频域空间域检测缺陷Halcon 频域差分空间域 缺陷检测(lines_gauss 提取线)Halcon 频域差分空间域(blob特征&#xf…...

架构整洁之道-软件架构-测试边界、整洁的嵌入式架构、实现细节

6 软件架构 6.14 测试边界 和程序代码一样,测试代码也是系统的一部分。甚至,测试代码有时在系统架构中的地位还要比其他部分更独特一些。 测试也是一种系统组件。 从架构的角度来讲,所有的测试都是一样的。不论它们是小型的TDD测试&#xff…...

nodejs学习计划--(十)会话控制及https补充

一、会话控制 1.介绍 所谓会话控制就是 对会话进行控制 HTTP 是一种无状态的协议,它没有办法区分多次的请求是否来自于同一个客户端, 无法区分用户 而产品中又大量存在的这样的需求,所以我们需要通过 会话控制 来解决该问题 常见的会话控制…...

fast.ai 机器学习笔记(四)

机器学习 1:第 11 课 原文:medium.com/hiromi_suenaga/machine-learning-1-lesson-11-7564c3c18bbb 译者:飞龙 协议:CC BY-NC-SA 4.0 来自机器学习课程的个人笔记。随着我继续复习课程以“真正”理解它,这些笔记将继续…...

LLM大模型常见问题解答(2)

对大模型基本原理和架构的理解 大型语言模型如GPT(Generative Pre-trained Transformer)系列是基于自注意力机制的深度学习模型,主要用于处理和生成人类语言。 基本原理 自然语言理解:模型通过对大量文本数据的预训练&#xff…...

这种学习单片机的顺序是否合理?

这种学习单片机的顺序是否合理? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!&#xff01…...

13 年后,我如何用 Go 编写 HTTP 服务(译)

原文:Mat Ryer - 2024.02.09 大约六年前,我写了一篇博客文章,概述了我是如何用 Go 编写 HTTP 服务的,现在我再次告诉你,我是如何写 HTTP 服务的。 那篇原始的文章引发了一些热烈的讨论,这些讨论影响了我今…...

flask+python高校学生综合测评管理系统 phl8b

系统包括管理员、教师和学生三个角色; 。通过研究,以MySQL为后端数据库,以python为前端技术,以pycharm为开发平台,采用vue架构,建立一个提供个人中心、学生管理、教师管理、课程类型管理、课程信息管理、学…...

【GameFramework框架内置模块】1、全局配置(Config)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录: https://blog.csdn.net/q7…...

PySpark(四)PySpark SQL、Catalyst优化器、Spark SQL的执行流程、Spark新特性

目录 PySpark SQL 基础 SparkSession对象 DataFrame入门 DataFrame构建 DataFrame代码风格 DSL SQL SparkSQL Shuffle 分区数目 DataFrame数据写出 Spark UDF Catalyst优化器 Spark SQL的执行流程 Spark新特性 自适应查询(SparkSQL) 动态合并 动态调整Join策略 …...

2024第六届中国济南国际福祉及残疾人用品展览会/失能护理展

龘龘龙年-第六届山东福祉展会-将于5月27-29日在济南黄河国际会展中心举办; 一、引言 2024年,中国龙年,龙象征着力量、繁荣与希望。在这个特殊的年份,一场备受瞩目的盛会即将拉开帷幕。2024年第六届中国(济南&#xf…...

SegmentAnything官网demo使用vue+python实现

一、效果&准备工作 1.效果 没啥好说的,低质量复刻SAM官网 https://segment-anything.com/ 需要提一点:所有生成embedding和mask的操作都是python后端做的,计算mask不是onnxruntime-web实现的,前端只负责了把rle编码的mask解…...

CoPaw:让AI代码助手深度适配个人项目与团队规范的工程化实践

1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目,叫CoPaw,作者是 alexgzx。光看名字可能有点摸不着头脑,但如果你对 AI 辅助编程、代码生成或者想提升自己的开发效率感兴趣,那这个项目绝对值得你花时间研究一下。简单来说…...

【技术解析】基于主成分分析与神经网络的航空安全风险建模:从QAR数据预处理到实时预警仿真

1. 航空安全风险建模的技术背景 每次坐飞机时,你可能都好奇过:机长是如何确保飞行安全的?其实背后有一整套数据驱动的安全体系在支撑。QAR(快速存取记录器)就像飞机的"黑匣子",记录了上百项飞行参…...

Windows Defender终极移除指南:高效卸载13项核心服务完整教程

Windows Defender终极移除指南:高效卸载13项核心服务完整教程 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirr…...

多模态AI实战:基于OpenGVLab/Ask-Anything构建视觉问答系统

1. 项目概述:当视觉大模型学会“看图说话”最近在折腾多模态AI应用,发现了一个挺有意思的开源项目,叫OpenGVLab/Ask-Anything。简单来说,它就像一个给AI装上了“眼睛”和“嘴巴”的系统,你给它一张图片或一段视频&…...

时空镜像立体成像楼宇全态透明智慧管控技术解析方案

时空镜像立体成像楼宇全态透明智慧管控技术解析方案一、方案概述当前传统楼宇管控普遍存在二维监控信息碎片化、空间感知能力薄弱、人员定位依赖外设、跨镜头轨迹断裂、身份核验存在漏洞、设备运维滞后、区域管控存在盲区等行业共性痛点,多数系统仅实现视频录像与基…...

从零打造专业GitHub个人资料页:Markdown与动态集成实战指南

1. 项目概述与核心价值 在技术圈子里混了十几年,我越来越觉得,一个开发者的“数字门面”和代码能力同等重要。这个门面,很多时候就是你的GitHub主页。早些年,大家的GitHub个人页面就是个简单的仓库列表,加上一些贡献图…...

Arm Iris组件参数化建模与调试实践

1. Arm Iris组件概述与核心价值Arm Iris组件是Fast Models仿真平台中的关键模块,它为芯片设计验证和软件开发提供了高度参数化的虚拟原型环境。作为一名长期从事Arm架构开发的工程师,我发现Iris组件的设计理念完美体现了"配置即硬件"的思想——…...

基于RP2040的客制化宏键盘:从硬件设计到KMK固件开发全攻略

1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目,叫clawdpad,作者是kudretyilmazz。乍一看这个名字,可能有点摸不着头脑,但如果你对机械键盘、客制化输入设备或者桌面自动化感兴趣,那这个项目绝对值得你花时间…...

CC2530与ESP8266物联网网关:ZigBee转Wi-Fi通信协议转换实战

1. 项目概述:当ZigBee遇上Wi-Fi最近在折腾一个智能家居的传感器节点,核心是TI的CC2530 ZigBee芯片。这玩意儿功耗低、组网方便,是很多低功耗传感网络的绝佳选择。但问题来了,ZigBee网络的数据最终怎么方便地送到我们手机上去看呢&…...

告别U盘!用PXE网络批量装UOS,一台电脑搞定所有(附Arm/Mips/X86全架构配置)

告别U盘!用PXE网络批量装UOS,一台电脑搞定所有(附Arm/Mips/X86全架构配置) 在国产化替代的大背景下,UOS操作系统凭借其出色的兼容性和安全性,正被越来越多的企业和机构采用。然而,当面对数十台甚…...