Java学习之多态二

news2024/12/26 21:28:31

目录

一、运用多态解决宠物喂食问题

原理分析

运行测试

运行结果

 分析

增加宠物和食物种类

Pig类

Rice类

测试

运行结果


一、运用多态解决宠物喂食问题

改变Master类的feed方法的参数列表

package com.hspedu.poly_;

public class Master {
    private String name;

    public Master(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    public void feed(Animal animal, Food food){
       System.out.println("主人" + name + "给"+ animal.getName() + "喂" + 
                food.getName());
    }

}

原理分析

1)animal的编译类型是Animal,可以指向(接收)Animal子类的对象

2)food的编译类型是Food,可以指向(接收)Food子类的对象

运行测试

在Poly01.java中测试,为了区分加~

package com.hspedu.poly_;

public class Poly01 {
    public static void main(String[] args) {
        Master master = new Master("小李");
        Dog spike = new Dog("Spike~");
        Bone bone = new Bone("大骨头~");
        
        master.feed(spike,bone);
        Cat tom = new Cat("Tom~");
        Fish fish = new Fish("鱼罐头~");
        master.feed(tom,fish);
    }
}

运行结果

 分析

因为spike是Dog类的对象,Dog类是Animal的子类,Animal可以接收子类的对象的传参;bone传参的原理也是如此

增加宠物和食物种类

增加宠物Pig类继承Aniaml类,增加食物Rice类,继承Food类,别的都不需要,在Poly01中直接创建新对象然后调用feed方法即可,这就是多态的便利

Pig类

package com.hspedu.poly_;

public class Pig extends Animal{
    public Pig(String name) {
        super(name);
    }
}

Rice类

package com.hspedu.poly_;

public class Rice extends Food{
    public Rice(String name) {
        super(name);
    }
}

测试

package com.hspedu.poly_;

public class Poly01 {
    public static void main(String[] args) {
        Master master = new Master("小李");
        Dog spike = new Dog("Spike~");
        Bone bone = new Bone("大骨头~");
        master.feed(spike,bone);

        Cat tom = new Cat("Tom~");
        Fish fish = new Fish("鱼罐头~");
        System.out.println("===============");
        master.feed(tom,fish);

        Pig pig = new Pig("猪猪侠");
        Rice rice = new Rice("八宝饭");
        System.out.println("============");
        master.feed(pig,rice);

    }
}

运行结果

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

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

相关文章

基于机器学习之模型树短期负荷预测(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 📝目前更新:🌟🌟🌟电力系统相关知识,期刊论文&…

Python 中的 Raincloud 图绘制

Python 中的 Raincloud 图 提示:一种强大的数据可视化方法,由小提琴图、散点图和箱线图的组合组成 提示:目录 Python 中的 Raincloud 图绘制Python 中的 Raincloud 图前言一、什么是 Raincloud 图?二、使用步骤1.加载数据集2.读入…

S7协议抓包分析(附pcap数据包)

一、S7协议概述 1、S7协议简介 S7comm(S7 通信)是西门子专有协议,可在西门子 S7-300/400 系列的可编程逻辑控制器 (PLC) 之间运行。它用于 PLC 编程、PLC 之间的数据交换、从 SCADA(监控和数据采集)系统访问 PLC 数据…

刷爆力扣之最长连续递增序列

刷爆力扣之最长连续递增序列 HELLO,各位看官大大好,我是阿呆 🙈🙈🙈 今天阿呆继续记录下力扣刷题过程,收录在专栏算法中 😜😜😜 该专栏按照不同类别标签进行刷题&#…

代码随想录算法训练营第五十五天|392. 判断子序列、115. 不同的子序列

LeetCode 392. 判断子序列 链接:392. 判断子序列 双指针: 思路: 本题较容易,如果不用动态规划而是用双指针的办法思路会更加简单。首先两个指针fast,slow分别代表t,s的下标,快指针用于遍历长…

来浅谈一下:GraalVM下载、安装、特点、概括

文章目录前言一、GraaIVM是什么?二、GraaIVM优点三、安装GraaIVM1.GraaIVM Community版本简略2.下载3.解压4.配置变量4.1、JAVA_HOME改成graalvm的位置4.2、编辑path5、查看总结前言 GraaIVM High-performance runtime with new compiler optimizations to accele…

unity计算着色器

序 计算着色器,是什么?好像是并行计算的一个东西。 并行计算,挖矿?显卡? 那看来得先了解显卡,再了解计算着色器了。 认识显卡 显卡,小白,不懂。 显卡的印象,只是停…

批量修改文件名,图文教学,2分钟简单学会

​文件名称是文件的重要组成部分,在我们日常生活中,对文件进行命名,是经常使用到的一种功能。可是有时候需要重命名的文件实在是太多了咋办呢?有没有什么方法可以批量修改文件名? 本文将以图文教学的方式,…

为什么不建议在MySQL中使用 utf8?

MySQL 字符编码集中有两套 UTF-8 编码实现:utf8 和 utf8mb4。 如果使用 utf8 的话,存储 emoji 符号和一些比较复杂的汉字、繁体字就会出错。 为什么会这样呢?这篇文章可以从源头给你解答。 何为字符集? 字符是各种文字和符号的…

LPA-star算法(Lifelong Planning)及相关思考

一、LPA-star算法(Lifelong Planning)简介 LPA * ( Lifelong Planning 终身规划 A * )是一种基于A * 的增量启发式搜索算法,被用来处理动态环境下从给定起始点到给定目标点的最短路径问题,即起始点和目标点是固定的。 &#xff08…

图数据库知识点1:图数据库与关系型数据库区别

文章目录 前言一、图数据库区别于其他数据库的核心是什么?二、图数据库能解决哪些问题? 1.图的优势2.目前的图的实现方式及优劣3.图的技术趋势及优势小结总结前言 《图数据库知识点》系列有20讲,每一讲中会重点分享一个图数据库知识点&#…

什么是JVM?JVM的机制与JVM自动内存管理机制,如何进行优化

1. 什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码…

彻底搞懂MySql的B+Tree

1.什么是索引 官方定义:一种能为mysql提高查询效率的数据结构,索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构。好比如,一本书,你想找到自己想看的章节内容,直接查询目录就行。这里的目录就类似索引…

华为路由器升级系统文件

欢迎关注微信公众号【厦门微思网络】。http://www.xmws.cn 组网图形 组网需求 RouterA的管理网口与用户侧主机HostA相连。要求通过BootROM菜单下载系统文件至RouterA完成系统升级。 操作步骤 1.在PC端启动FTP Server服务。 2.用串口线连接并通过Console口登录设备。 3.重启设…

Java内存模型与线程(3)

文章目录4. Java与线程4.1 线程的实现4.2 Java线程调度4.3 状态转换4. Java与线程 并发不一定要依赖多线程(如PHP中很常见的多进程并发),但是在Jva里面谈论并发,大多数都与线程脱不开关系。既然我们这本书探讨的话题是Java虚拟机…

一个系列涨粉47w,小红书内容创意卷出新高度

前有双11,后有世界杯,11月注定是热闹的。图源新红_流量分析_趋势查询在此情况下, 小红书内又涌现出哪些黑马博主?有多少品牌打造出了爆品?什么样的种草玩法才能成功出圈?我们将全面分析11月榜单&#xff0c…

java面向对象最全入门笔记

Java面向对象 什么是面向对象编程? 面向:找、拿。 对象:东西。 面向对象编程:找或者拿东西过来编程。 设计对象并使用 设计类,创建对象并使用 类是什么? 类(设计图)&#xff1…

Vue Cli安装和node-sass、less-loader、sass-loader安装

一、Vue Cli安装 CLI全程是Command-Line Interface,命令行界面,俗称脚手架,可以帮我们快速的创建vue项 Vue Cli的使用必须依赖node环境和webpack 管理员方式打开cmd进行安装,安装命令: npm i -g vue/cli 查看版本…

鸢尾花数据种类预测、分析与处理、scikit-learn数据集使用、seaborn作图及数据集的划分

一、鸢尾花种类预测 Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理,Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集 鸢尾花数据集包含了 4个属性(特征值) Sepal.Length(花萼长度&#…

Linux学习-69-Linux系统启动管理

16 Linux系统启动管理 Linux 系统的启动是不需要人为参与和控制的,只要选择开机,系统就会按照设定好的方式进行启动。不过,了解系统的启动有助于我们在系统出现问题时能够快速地修复 Linux 系统。在 CentOS 6.x 中,系统的启动过程…