当前位置: 首页 > 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,"鱼");

http://www.lryc.cn/news/298392.html

相关文章:

  • Git详细讲解
  • k8s弃用docker后使用ctr导入镜像
  • mxxWechatBot开发中..
  • C#系列-C#log4net日志保存到文件(15)
  • linux 08 文件查找
  • 【Java面试】数据类型常见面试题
  • unity学习案例总结
  • Halcon 频域缺陷检测
  • 架构整洁之道-软件架构-测试边界、整洁的嵌入式架构、实现细节
  • nodejs学习计划--(十)会话控制及https补充
  • fast.ai 机器学习笔记(四)
  • LLM大模型常见问题解答(2)
  • 这种学习单片机的顺序是否合理?
  • 13 年后,我如何用 Go 编写 HTTP 服务(译)
  • flask+python高校学生综合测评管理系统 phl8b
  • 【GameFramework框架内置模块】1、全局配置(Config)
  • PySpark(四)PySpark SQL、Catalyst优化器、Spark SQL的执行流程、Spark新特性
  • 2024第六届中国济南国际福祉及残疾人用品展览会/失能护理展
  • SegmentAnything官网demo使用vue+python实现
  • Java:字符集、IO流 --黑马笔记
  • RabbitMQ之五种消息模型
  • 项目02《游戏-14-开发》Unity3D
  • 【Java数据结构】单向 不带头 非循环 链表实现
  • 【ES6】模块化
  • 腾讯云4核8G服务器可以用来干嘛?怎么收费?
  • 怎么在bash shell中操作复杂json对象
  • 11.div函数
  • windows11 MSYS2下载安装教程
  • Excel+VBA处理高斯光束
  • 如何启动若依框架