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

面向对象的三大特征之一多态

多态

概念

  • 多态是同一个对象,在不同时刻表现出来不同的形态,称之为多态。

    • 例如:水,我们把水理解成为一个对象,而水会有不同的形态,比如 液态水、冰块、水蒸气
  • 多态的前提

    • 有继承/实现关系(继承是类和类之间的关系,实现是类和接口直接的关系)
    • 有方法重写(继承之后,要对方法进行重写)
    • 有父类的引用指向子类的对象。例如:Animal a = new Cat();
  • 多态成员的访问特点(非常重要,一定得理解,请先看口诀,再结合图片下方注意文字,和图片理解)

    • 口诀(父类是左边,子类是右边):

      • 对于成员变量,编译看左边,执行看左边
      • 对于成员方法,编译看左边,执行看右边

      注意:

      ​ ①:先解释下口诀,编译看左边,也就是看左边有无这个成员,有的话编译才通过,我们可以看到图片一和图片二两张都是因为左边父类中无 爆红的这个成员,所以报错

      ​ ②:对于成员变量,编译看左边(也就是看左边父类中有无这个成员,有的话编译通过),执行看左边(我们看第三张图,可以看到最中运行的结果是左边父类中的成员变量值)

      ​ ③:对于成员方法,编译看左边(也就是看左边父类中有无这个成员,有的话编译通过),执行看右边(我们看第三张图,可以看到最中运行的结果是右边子类中的成员方法,因为方法重写了)

多态的好处和弊端

  • 好处:提高了程序的扩展性,定义方法的时候,使用父类作为参数,将来在使用的时候使用具体的子类参与操作

  • 弊端:不能使用子类特有的功能(必须父类中有【回想口诀,只有编译通过才行】)

多态的转型

  • 多态的弊端是,不能使用子类特有的功能,怎么办呢?就提出我们多态的转型。

    类型方向
    向上转型从子到父父类引用指向子类对象Animal a = new Cat();
    向下转型从父到子父类引用转为子类对象Cat b = (Cat)a

    注意:向下转型,有个前提,得是同一种对象

    ​ Animal a = new Cat(); // a 是Animal类型,但是本质是 猫

    ​ Dog d = (Dog)a; // 很明显这行就错了,(Dog)a 相当于强转,但是 猫怎么能转成狗呢!

    // 动物类
    class Animal{public void show(){System.out.println("动物!");}
    }
    // 狗类
    class Dog extends Animal{public void show(){System.out.println("狗!");}public void speak(){System.out.println("汪汪");}
    }
    // 猫类
    class Cat extends Animal{public void show(){System.out.println("猫!");}public void eat(){System.out.println("小鱼干");}
    }public class Test {public static void main(String[] args) {// 向上转型Animal a = new Cat();Animal b = new Dog();// 调用方法(父类对象调用,多态的形式,记得口诀)a.show();b.show();// 编译不通过,因此爆红
    /*        a.speak();a.eat();*/// 向下转型Cat c = (Cat)a;Dog d = (Dog)b;// 调用方法(子类对象调用)c.eat();c.show();d.speak();d.show();/*        Cat c1 = (Cat)b;c1.speak();*/}
    }
    

  • 多态很重要,一定要理解!!!

  • 其他两大特征可参考下面这两篇文章:

    • 面向对象的三大特征之一继承

    • 面向对象的三大特征之一封装

相关文章:

面向对象的三大特征之一多态

多态 概念 多态是同一个对象,在不同时刻表现出来不同的形态,称之为多态。 例如:水,我们把水理解成为一个对象,而水会有不同的形态,比如 液态水、冰块、水蒸气 多态的前提 有继承/实现关系(继承…...

vue3中标签form插件

想写一个系统&#xff0c;对八字进行标注&#xff0c;比如格局&#xff0c;有些八字就有很多格局&#xff0c;于是就想着使用el-tag但是&#xff0c;form表单中如何处理呢&#xff1f; 这个时候&#xff0c;就需要自己写一个,modelValue是表单的默认属性 <template><…...

企业数字化转型:1个核心、2种力量、3个关键点、4大转型、5大平台

引言 企业数字化转型源于当今数字化时代的巨大变革。随着科技的飞速发展和全球市场的日益竞争&#xff0c;企业们正面临着前所未有的挑战和机遇。这些挑战包括消费者行为的变化、新技术的涌现以及市场竞争的加剧。在这种环境下&#xff0c;传统的商业模式和运营方式已经不再适…...

Agilent安捷伦E4990A阻抗分析仪20Hz

Agilent安捷伦E4990A阻抗分析仪性能卓越&#xff0c;适用于元器件、半导体和材料测量。它具有宽广的频率范围&#xff0c;从20Hz到120MHz&#xff0c;能够适应各种不同的阻抗测量需求。在宽阻抗范围内&#xff0c;该仪器能够提供出色的0.045%&#xff08;典型值&#xff09;基本…...

性能优化-OpenMP概述(一)-宏观全面理解OpenMP

本文旨在从宏观角度来介绍OpenMP的原理、编程模型、以及在各个领域的应用、使用、希望读者能够从本文整体上了解OpenMP。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础…...

Prometheus实战篇:Prometheus监控nginx

准备环境 在此专栏的前几篇文章中已经准备了一台服务器作为我们进行环境的准备.大家也可以通过虚拟机创建俩台服务器,一台作为Prometheus的安装另外一台进行其他软件安装并且进行监控的服务器. 这里我就不赘述nginx的安装教程,相信大家都可以搜到,使用docker或者直接通过安装包…...

JVM加载class文件的原理机制

1、JVM 简介 JVM 是我们Javaer 的最基本功底了&#xff0c;刚开始学Java 的时候&#xff0c;一般都是从“Hello World ”开始的&#xff0c;然后会写个复杂点class &#xff0c;然后再找一些开源框架&#xff0c;比如Spring &#xff0c;Hibernate 等等&#xff0c;再然后就开发…...

如何使用CapSolver解决Web爬虫中遇到的CAPTCHA问题

Web爬取是一种强大的技术&#xff0c;用于从网站中提取数据&#xff0c;但经常会遇到一个常见障碍&#xff0c;即CAPTCHA。CAPTCHA是“Completely Automated Public Turing test to tell Computers and Humans Apart”的缩写&#xff0c;旨在防止自动机器人访问网站。然而&…...

杰发科技AC7801——IO模拟IIC注意事项

7801的参考手册没有说清楚 7840说明了用开漏 使用办法...

展台搭建与设计都有哪些思路

1、现代简约 设计理念强调简洁、线条清晰和空间布局&#xff0c;突出产品本身&#xff0c;使展台干净整洁&#xff0c;适合展示高科技、现代化的产品。 2、自然生态 利用植物、木材等自然元素&#xff0c;营造与自然和谐共处的氛围&#xff0c;适合健康、环保、生态产品。 3、品…...

解决mock单元测试中 无法获取实体类xxx对应的表名

错误描述&#xff1a;在执行单元测试时&#xff0c;执行到new Example时抛出异常&#xff0c;提示无法获取实体类xxx对应的表名 Example example new Example(ServeSubscribeRecord.class);Example.Criteria criteria example.createCriteria();criteria.andEqualTo("se…...

arm64虚拟化技术与kvm实现原理分享

文章目录 1 简介2 arm64 虚拟化相关硬件支持2.1 arm64 cpu 虚拟化基本原理及硬件支持2.2 系统寄存器捕获和虚拟寄存器支持2.3 VHE 特性支持2.4 内存虚拟化支持2.5 IO 虚拟化支持2.6 DMA 虚拟化支持2.7 中断虚拟化支持2.8 定时器虚拟化支持 3 arm64 kvm 初始化流程3.1 初始化总体…...

选择 省市区 组件数据 基于vue3 + elment-plus

h5 <el-cascader v-model"form.area" :props"{value: label,label: label }" :options"jsonData" change"handleChange" style"width: 100%;" /> script import jsonData from /utils/city.json; 选完省市区 数据是一…...

了解 nextTick

一. 什么是 nextTick 简单的说&#xff0c;nextTick 方法是在 Vue.js 中常见的一种异步更新 DOM 的机制。它的原理是利用 JavaScript 的事件循环机制以及浏览器的渲染流程来实现延迟执行 DOM 更新操作。 它的出现主要是为了解决 Vue 的异步更新导致的 DOM 更新后的操作问题。…...

C++精进之路(十六)string类和标准模板库

C提供了一组功能强大的库&#xff0c;这些库提供了很多常⻅编程问题的解决方案以及简化其他问题的工具。 string 类为将字符串作为对象来处理提供了一种方便的方法。string 类提供了自动内存管理功能以及众多处 理字符串的方法和函数。例如&#xff0c;这些方法和函数让您能够合…...

【23.12.29期--Redis缓存篇】谈一谈Redis的集群模式

谈一谈Redis的集群模式 ✔️ 谈一谈Redis的集群模式✔️主从模式✔️ 特点✔️Redis主从模式Demo ✔️哨兵模式✔️Redis哨兵模式Demo✔️特点 ✔️Cluster模式✔️Redis Cluster模式Demo✔️特点 ✔️ 谈一谈Redis的集群模式 Redis有三种主要的集群模式&#xff0c;用于在分布…...

【算法挨揍日记】day34——647. 回文子串、5. 最长回文子串

647. 回文子串 647. 回文子串 题目描述&#xff1a; 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串&am…...

欧科云链研究院:奔赴2024,Web3与AI共振引爆数字时代潘多拉魔盒

出品&#xff5c;欧科云链研究院 2024年&#xff0c;Web3与AI两个数字科技的巅峰碰撞&#xff0c;欧科云链研究院探索AI与Web3的技术融合&#xff0c;与澎湃科技联合发布2024年展望&#xff0c;原标题为《2024年展望&#xff1a;Web3与AI共振引爆可信数字社会》&#xff0c;共…...

【Py/Java/C++三种语言OD2023C卷真题】20天拿下华为OD笔试之【数学】2023C-素数之积【欧弟算法】全网注释最详细分类最全的华为OD真题题解

文章目录 题目描述与示例题目描述输入描述输出描述示例输入输出说明 解题思路暴力解质数筛 代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 RSA加密算法在网络安全世界中无处不在&#xff0c;它利用了极大些数因数分解的闲难…...

uniapp路由

1、路由登记 uni-app页面路由为框架统一管理&#xff0c;开发者需要在pages.json里配置每个路由页面的路径及页面样式。 类似小程序在 app.json 中配置页面路由一样。 所以 uni-app 的路由用法与 Vue Router 不同&#xff0c;如仍希望采用 Vue Router 方式管理路由&#xff0c;…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...