【精选】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,"鱼");

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

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

相关文章

Spring 开发 pom.xml 配置文件(通用配置)

因为在打 jar 包时总会出现各种各样莫名其妙的问题&#xff0c;所以本篇博客提供了含有 Java8.0 &#xff0c;mybatis&#xff0c;mysql&#xff0c;lombok 以及打 jar 包的完整 pom.xml 配置文件&#xff0c;直接复制使用即可 <project xmlns"http://maven.apache.or…

环境对人类智能、人工智能的影响

环境是指人类和人工智能所处的物理、社会和文化背景。环境在很大程度上影响着人类和人工智能的发展和表现&#xff0c;具体包括以下几个方面&#xff1a; 环境对于人类和人工智能的学习和认知具有重要影响。不同的环境提供了不同的学习和认知机会&#xff0c;可以帮助人类和人工…

Chapter 8 - 10. Congestion Management in TCP Storage Networks

Comparison with Lossless Networks As Chapter 2 explains, Fibre Channel defines a maximum frame size of 2148 bytes. Users do not have to change the MTU value, and hence, it is never a consideration. 如第 2 章所述,光纤通道定义的最大帧大小为 2148 字节。用户…

Mac上新版InfluxDB使用教程

一、简介 官网&#xff1a;influxdb 二、influxdb安装 建议使用Homebrew在 macOS 上安装 InfluxDB v2&#xff1a; brew install influxdb启动influxdb服务&#xff1a;brew services start influxdb 停止influxdb服务&#xff1a;brew services stop influxdb 查看是否启…

使用R语言fifer包进行分层采样

使用R语言fifer包中的stratified()函数用来进行分层采样非常方便&#xff0c;但fifer包已经从CRAN存储库中删除&#xff0c;需要从存档中下载可用的历史版本&#xff0c;下载链接&#xff1a;Index of /src/contrib/Archive/fifer (r-project.org)https://cran.r-project.org/s…

SQl 注入 - 利用报错函数updatexml及extracevalue

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、updatexml() 函数 1. 使用前提: 在 MySQL 高版本中(大于5.1版本)添加了对 XML 文档进行查询和修改的函数,包括 updatexml() 和 extractvalue()。 2. 显示错误处理: 在…

opencv 图像色彩空间转化

今天看了b站贾志刚的课&#xff0c;觉得不错&#xff0c;特地做学习笔记来和小伙伴分享 贾志刚的这个好像是2.0版本,30小时的,语言更加精炼,适合初级入门学习 第一节是常规安装 看他的步骤装就行了,记得配置完点应用再点确定,我第一次就是 没点然后就失败了,又得重配置一次…

python+flask+django农产品供销展销电子商务系统lkw43

供销社农产品展销系统的设计与实现&#xff0c;最主要的是满足使用者的使用需求&#xff0c;并且可以向使用者提供一些与系统配套的服务。本篇论文主要从实际出发&#xff0c;采用以对象为设计重点的设计方法&#xff0c;因此在进行系统总体的需求分时借助用例图可以更好的阐述…

电缆线的阻抗50Ω,真正含义是什么?

当我们提到电缆线的阻抗时&#xff0c;它到底是什么意思&#xff1f;RG58电缆通常指的是50Ω的电缆线。它的真正含义是什么&#xff1f;假如取一段3英尺(0.9144米)长的RG58电缆线&#xff0c;并且在前端测量信号路径与返回路径之间的阻抗。那么测得的阻抗是多少&#xff1f;当然…

[office] excel2003进行可视性加密的方法 #媒体#其他#知识分享

excel2003进行可视性加密的方法 Excel如何对重要文件进行可视性的加密处理呢?下面是小编带来的关于excel2003进行可视性加密的方法&#xff0c;希望阅读过后对你有所启发! excel2003进行可视性加密的方法&#xff1a; 可视性加密步骤1&#xff1a;打开你要加密的excel2003文档…

使用UMAP降维可视化RAG嵌入

大型语言模型&#xff08;LLMs&#xff09;如 GPT-4 已经展示了出色的文本理解和生成能力。但它们在处理领域特定信息方面面临挑战&#xff0c;比如当查询超出训练数据范围时&#xff0c;它们会产生错误的答案。LLMs 的推理过程也缺乏透明度&#xff0c;使用户难以理解达成结论…

java实战:销售订单30分钟未支付自动取消

本文将介绍如何使用Java实现一个销售订单在30分钟内未支付则自动取消的系统。我们将探讨如何使用Spring的定时任务功能来检查订单状态&#xff0c;并在订单未支付的情况下执行取消操作。 一、需求分析 在电商系统中&#xff0c;为了管理库存和避免长时间占用资源&#xff0c;…

指针的基本含义及其用法

1.前言 在学习C语言的时候&#xff0c;我们会经常接触一个概念&#xff0c;指针和地址&#xff0c;关于这两个概念很多人并不能理解地十分透彻&#xff0c;接下来我将详细介绍一下这两者的概念 2.地址 我们知道计算机的上CPU&#xff08;中央处理器&#xff09;在处理数据的时…

C++重新入门-循环

目录 1.循环类型 while循环&#xff1a; for循环 基于范围的for循环(C11) do...while 循环 2.循环控制语句 3.无限循环 有的时候&#xff0c;可能需要多次执行同一块代码。一般情况下&#xff0c;语句是顺序执行的&#xff1a;函数中的第一个语句先执行&#xff0c;接着…

【洛谷 P1208】[USACO1.3] 混合牛奶 Mixing Milk 题解(贪心算法+向量+结构体排序)

[USACO1.3] 混合牛奶 Mixing Milk 题目描述 由于乳制品产业利润很低&#xff0c;所以降低原材料&#xff08;牛奶&#xff09;价格就变得十分重要。帮助 Marry 乳业找到最优的牛奶采购方案。 Marry 乳业从一些奶农手中采购牛奶&#xff0c;并且每一位奶农为乳制品加工企业提…

AI:126-基于深度学习的人体情绪识别与分析

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

react函数组件中使用context

效果 1.在父组件中创建一个createcontext并将他导出 import React, { createContext } from react import Bpp from ./Bpp import Cpp from ./Cpp export let MyContext createContext(我是组件B) export let Ccontext createContext(我是组件C)export default function App…

使用client-only 解决组件不兼容SSR问题

目录 前言 一、解决方案 1.基于Nuxt 框架的SSR应用 2.基于vue2框架的应用 3.基于vue3框架的应用 二、总结 往期回顾 前言 最近在我的单页面SSR应用上开发JSON编辑器功能&#xff0c;在引入组件后直接客户端跳转OK&#xff0c;但是在直接加载服务端渲染的时候一直报这…

JavaScript基础第五天

JavaScript 基础第五天 今天我们学习数组&#xff0c;以及数组的增删改查。 1. 数组 数组&#xff1a;(Array)是一种可以按顺序保存数据的数据类型。 1.1. 定义数组 可以使用 const 声明一个方括号**[ ]&#xff0c;或者使用new Array**创建数组。 const array [1, 2, 4…

Netty应用(六) 之 异步 Channel

目录 12.Netty异步的相关概念 12.1 异步编程的概念 12.2 方式1&#xff1a;主线程阻塞&#xff0c;等待异步线程完成调用&#xff0c;然后主线程发起请求IO 12.3 方式2&#xff1a;主线程注册异步线程&#xff0c;异步线程去回调发起请求IO 12.4 细节注释 12.5 异步的好处…