[java基础揉碎]面向对象多态

news2024/12/24 3:01:45

目录

问题引出多态: 

 代码如下:

多态(多种状态)的介绍:

多态的具体体现:

方法的多态:

 对象的多态:

我们用多态解决最上面的问题:

​编辑 ​编辑

 多态的注意事项和细节:

多态的向上转型:

​编辑

 多态的向下转型

属性的重写问题


 

问题引出多态: 

 代码如下:

新建一个食物类

 食物类下面有两个子类:一个鱼类 一个骨头类

 

创建一个动物类:

 下面两个子类: 一个猫类 一个狗类

 

在创建一个主人类: 

 

 给主人添加给动物喂食的方法:

分别初始化动物和食物再去调用那个方法就实现了上面的问题: 

 如果主人还想要喂猫 ,再在主人添加一个喂猫的方法:

 再去初始化调用就可以了:

以上代码从功能上来说没有一点问题,  但是有一点问题, 如果动物很多, 事物也很多, 主人类就需要添加特别多的 feed 的方法, 所以出现了代码复用性不高, 而且不利于维护 

怎么解决呢, 利用多态!

多态(多种状态)的介绍:

方法或对象具有多种形态。是面向对象的第三大特征,多态是建立在封装和继承基础之上的。

多态的具体体现:

方法的多态:

方法的重载, 重写就能体现多态

根据对象的不同, 调用的say也不同就是一种多态

 对象的多态:

(1)一个对象的编译类型和运行类型可以不一致

(2)编译类型在定义对象时,就确定了,不能改变

(3) 运行类型是可以变化的

(4)编译类型看定义时=号的左边,运行类型看=号的右边

代码中这么使用怎么体现呢, 如下:

新建一个动物类:

 新建一个子类面猫类, 并重写父类的cry

在写一个子类狗类, 也重写父类的cry 

 这时运行:编译类型是动物类, 运行类型时狗子类 , 在用动物类去点方法的时候, 运行的就是狗子类的方法:

我们用多态解决最上面的问题:

直接将传的参数Dog, Bone和Cat, Fish直接改为他们的父类 Animal, Food , 因为父类可以直接指向(接收) 他们的子类:

 

 多态的注意事项和细节:

多态的前提是:两个对象(类)存在继承关系

多态的向上转型:

1)本质:父类的引用指向了子类的对象

2)语法:父类类型引用名= new 子类类型()

3)特点:编译类型看左边,运行类型看右边。可以调用父类中的所有成员(需遵守访问权限), 不能调用子类中特有成员; 最终运行效果看子类的具体实现!

子类重写了父类的方法在调用方法时就会先从子类开始查找方法: 

为了能够调用子类中特有成员, 便有了向下转型

 多态的向下转型

1)语法:子类类型引用名=(子类类型)父类引用

2)只能强转父类的引用,不能强转父类的对象  (好比说小明是个具体的人, 不能改变小明这个人, 但是这个人的身份以前是学生, 后来当官了, 他的身份地位发生变化)

3)要求父类的引用必须指向的是当前目标类型的对象

4)向下转型后, 可以调用子类类型中所有的成员

 但是如果现在指向狗可以吗?

是不可以的, 因为之前这个animal之前创建的对象是cat:

 

属性的重写问题

属性没有重写之说, 编译类型是多少就是多少:

instanceOf 比较操作符,用于判断对象的运行类型是否为XX类型或XX类型的子类型 

 

以下为false, 因为obj不是AA的子类: 

 

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

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

相关文章

Open3D 利用四个点计算球心和半径 (28)

Open3D 利用四个点计算球心和半径 (28) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 给定的四个点坐标,计算球心和半径,提供验证的四个点来比较最终的结果是否准确。 二、算法实现 1.代码 代码如下(示例): import numpy as npdef calculate_sphere_center_…

如何选择AI项目:从任务自动化到社会价值的全面考虑

目录 前言1 任务自动化的首要选择1.1 公司痛点分析:深入挖掘潜在问题1.2 数据集的收集与大小考虑:确保数据质量和规模匹配 2 AI项目的商业潜力2.1 技术考察与性能目标:确保技术选择符合项目需求2.2 商业考虑与成本效益分析:全面评…

《向量数据库指南》——Milvus Cloud BYOC 是什么?

Milvus Cloud BYOC 是什么? 10 个月前,Zilliz 正式发布了全托管的 Milvus 云服务——Milvus Cloud,为用户提供低成本、高性能的向量数据库服务。Zilliz 在打磨细节之际,也收到了来自管控较为严格的行业公司和组织的需求,他们大多来自于汽车、金融、医疗等行业,需要将数…

【Java设计模式】十六、责任链模式

文章目录 1、责任链模式2、案例:批假3、在源码中的实际应用 1、责任链模式 一个请求可以有多个对象处理,但这些对象能处理的权限不同。比如公司请假,部门负责人、副经理、经理都能批,但他们能批的最大天数不一样。每次让员工直接…

加密与安全_PGP、OpenPGP和GPG加密通信协议

文章目录 PGPOpenPGPGPG工作原理工作流程用途案例说明过程 代码实现pom依赖PgpEncryptionUtilPgpDecryptionUtilCommonUtilsPgpEncryptionTest 小结 PGP PGP (Pretty Good Privacy) 是一种加密通信协议,用于保护电子邮件和文件的安全性和隐私。它通过使用加密、数字…

福派斯狗粮质量怎么样?

亲爱的宠物家长们,你们是不是也在为选择一款高质量的狗粮而犯愁呢?今天,我要和大家分享一下福派斯狗粮的质量问题,希望能够为你们提供一些参考。 🐾 首先,让我们来聊聊福派斯狗粮的原材料。福派斯狗粮选用的…

机器学习模型—支持向量机 (SVM)

机器学习模型—支持向量机 (SVM) 支持向量机 (SVM) 是一种强大的机器学习算法,用于线性或非线性分类、回归,甚至异常值检测任务。SVM 可用于各种任务,例如文本分类、图像分类、垃圾邮件检测、笔迹识别、基因表达分析、人脸检测和异常检测。SVM 在各种应用中具有适应性和高效…

【VUe】简略学习 vue

Vue 是一套用于构建用户界面的渐进式框架。要想使用这个框架,就需要先在页面中引用: 如何使用: 来到控制台: 数据绑定 若要在标签里替换,就需要使用 v-bind 指令了: 在标签里(尖括号里&#xf…

jpg 转 ico 强大的图片处理工具 imageMagick

点击下载 windows, mac os, linux版本 GitHub - ImageMagick/ImageMagick: 🧙‍♂️ ImageMagick 7 1. windows程序 链接:https://pan.baidu.com/s/1wZLqpcytpCVAl52pIrBBEw 提取码:hbfy 一直点击下一步安装 2. 然后 winr键 打开cmd 然…

软文推广怎么做效果更好?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 软文推广想要效果好,你可以这么做: 1. 选对平台很重要 首先,你得找准你的目标受众喜欢去哪,然后就去那儿发软文。别盲目乱投,…

【计算机网络】1.5 分组交换网中的时延、丢包和吞吐量

A.分组交换网中的时延 当分组从一个节点沿着路径到后一节点时,该分组在沿途的各个节点经受了几种不同类型的时延。 时延的类型 处理时延 - d n o d a l d_{nodal} dnodal​ 处理时延包括以下部分—— a. 检查分组首部 b. 决定分组导向 排队时延 - d p r o c d_{…

原生JavaScript,根据后端返回扁平JSON动态【动态列头、动态数据】生成表格数据

前期准备&#xff1a; JQ下载地址&#xff1a; https://jquery.com/ <!DOCTYPE html> <html><head><meta charset"utf-8"><title>JSON动态生成表格数据,动态列头拼接</title><style>table {width: 800px;text-align: cen…

2.1 塑性力学——应力分析基本概念

个人专栏—塑性力学 1.1 塑性力学基本概念 塑性力学基本概念 1.2 弹塑性材料的三杆桁架分析 弹塑性材料的三杆桁架分析 1.3 加载路径对桁架的影响 加载路径对桁架的影响 目录 个人专栏—塑性力学 应力 \color{blue}应力 应力&#xff1a;内力的分布集度 单元体 \color{blue}单…

C++初学

1>思维导图 2>试编程 提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数要求使用C风格字符串完成 #include <iostream> #include<string.h> using namespace std;int main() {string str;cout <<…

选择短信群发平台要小心陷阱

你知道短信群发平台也有陷阱吗&#xff1f;选择短信群发平台很重要&#xff0c;今天小编就为您介绍短信群发平台有哪些陷阱&#xff1f; 这几点你要注意了&#xff1a; 1、扣量&#xff0c;有些不靠谱的短信群发平台开始以低价诱惑“客户”&#xff0c;但是发送过程中就暗中扣…

不锈钢电阻器-栅极电阻器 - 为什么要使用它们呢?

常规 如果你看一个典型的吉他放大器的原理图&#xff0c;你会注意到有一个电阻器与第一个电子管的栅极串联&#xff0c;通常在68K左右&#xff0c;还有一个电阻器与功率管的栅极串联&#xff0c;通常为1.5K或5.6K&#xff0c;你可能会偶尔看到非常大的电阻&#xff0c; 例如 4…

学习JavaEE日子 Day24 TreeSet,内置比较器,外置比较器,HashMap

Day24 TreeSet 1.TreeSet 1.1 TreeSet的使用 注意&#xff1a;TreeSet的使用和HashSet一样 public class Test01 {public static void main(String[] args) {//创建TreeSet集合的对象TreeSet<String> set new TreeSet<>();//添加元素set.add("麻生希"…

Excel生成 chart 混合图表

在开发中有这样一个需求&#xff0c;邮件预警的时候&#xff0c;要求邮件主体内容是一个Chart 图表&#xff08;生成后的img&#xff09;&#xff0c;邮件需要有附件&#xff0c;且附件是Excel列表加图表&#xff0c;图表类型是混合图。 回顾&#xff1a;在之前一篇讲到如何使用…

Java中 常见的开源图库介绍

阅读本文之前请参阅------Java中 图的基础知识介绍 在 Java 中&#xff0c;有几种流行的开源图库&#xff0c;它们提供了丰富的图算法和高级操作&#xff0c;可以帮助开发者更高效地处理图相关的问题。以下是几种常见的 Java 图库及其特点和区别&#xff1a; JGraphT …

【C++】---string的OJ题

【C】---string的OJ题 1.字符串转整形数字&#xff08;重要&#xff09;&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;思路展示&#xff08;3&#xff09;代码实现 2.字符串相加&#xff08;重要&#xff09;&#xff08;1&#xff09;题目描述&#xff08;2&am…