java中的多态

①定义:

Java的多态是指同一个方法在不同对象上有不同的行为。它是面向对象编程的一个重要特性,通过多态可以实现代码的灵活性和可扩展性。

在Java中,多态的实现主要依靠两个机制:继承和方法重写。

  1. 继承:子类可以继承父类的属性和方法。当子类继承父类后,可以使用父类的引用来引用子类的对象。这样,通过父类的引用调用同名方法时,实际上会调用子类中重写的方法。

  2. 方法重写:子类可以重写父类的方法,即在子类中重新定义与父类中同名、同参数列表、同返回类型的方法。当父类的引用指向子类的对象时,调用该方法时会执行子类中的方法。

多态的优点:

  • 提高代码的灵活性和可扩展性:通过多态,可以在不修改原有代码的情况下,通过增加新的子类来扩展程序的功能。

  • 简化代码的编写和维护:通过多态,可以使用父类的引用来统一处理不同子类的对象,减少了代码的重复性。

  • 提高代码的可读性:通过多态,可以使代码更加简洁、清晰,易于理解和维护。

②方法的多态

方法的重载和重写就体现了多态

③对象的多态

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

Animal animal = new Dog();

编译类型为Animal,运行类型为Dog;

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

(3)运行类型可以变化;

Animal animal = new Dog();//编译类型为animal,运行类型为dog;
animal = new Cat();//编译类型为animal,运行类型为cat;

(4)编译类型看等号的左边;运行类型看等号的右边;

④向上转型

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

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

Animal animal = new Dog();

(3)特点:编译类型看左边,运行类型看右边;

可以调用父类中的所有成员(需遵守访问权限),

不能调用子类中特有成员,(因为在编译阶段,能调用哪些成员,是由编译类型决定的)

//animal.catchMause();错误,因为这是子类特有的方法

最终运行效果看子类(运行类型)的具体实现;即调用方法时,按照从子类(运行类型)开始查找重写或重载的方法,如果没有的话,就去父类中找,直到Object类;

⑤向下转型

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

Animal animal = new Dog();
Dog dog = (Dog) animal;

(2)只能强转父类的引用,不能强转父类的对象;

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

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

⑥注意事项

(1)属性没有重写之说,属性的值只看编译类型(等号的左边);

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

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

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

相关文章

详解SpringCloud微服务技术栈:一文速通RabbitMQ,入门到实践

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:详解SpringCloud微服务技术栈:DockerCompose部署微服务集群 📚订阅专栏:微服务技术全家桶 希…

ELK分离式日志(2)

目录 一.FilebeatELK 部署 开台服务器(192.168.233.50)下载fliebeat: 安装nginx后查看下日志文件: 设置 filebeat 的主配置文件: 关闭logstash,检测文件: 在50节点上启动filebeat: 访问页…

SpikingJelly笔记之IFLIF神经元

文章目录 前言一、脉冲神经元二、IF神经元1、神经元模型2、神经元仿真 三、LIF神经元1、神经元模型2、神经元仿真 总结 前言 记录整合发放(integrate-and-fire, IF)神经元与漏电整合发放(leaky integrate-and-fire, LIF)神经元模型,以及在SpikingJelly中的实现方法…

x-cmd pkg | yq - 命令行 YAML处理工具

目录 简介首次用户支持格式转换友好的显示和操作语法与 jq 类似竞品和相关作品进一步阅读 简介 yq (YAML Query) 是一个轻量级的 YAML、JSON、XML 处理器,主要用于查询和提取 YAML 数据。 本 yq 的包来自 mikefarah/yq 项目,语法类似于 jq 。相比 kisly…

java数据结构与算法刷题-----LeetCode645. 错误的集合(位运算解法需要重点掌握)

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 法一:桶排序思想法二:位运算 法一&#x…

Python文件操作和异常处理:高效处理数据的利器

文章目录 一、引言1.1 文件操作和异常处理对于编程的重要性1.2 Python作为实现文件操作和异常处理的强大工具 二、为什么学习文件操作和异常处理2.1 处理各种文件格式:从文本到图像到音频等2.2 确保代码的鲁棒性:有效处理异常情况 三、文件读取和写入3.1…

Transformer 深度学习模型

文章目录 Transformer是一种深度学习模型,最初由Vaswani等人在2017年的论文《Attention is All You Need》中提出。它被设计用于处理序列数据,特别是在自然语言处理(NLP)任务中取得了显著的成功。 传统的循环神经网络&#xff08…

什么是关键字?C语言的关键字有哪些?(C语言32个关键字详解)

目录 一、问题 二、解答 1、数据类型关键字(12个) (1) 声明和定义的区别 (2) 数据类型关键字 • char:声明字符型变量 1、声明字符变量 2、字符数组 3、ASCII码表示 4、指针与字符数组 5、多字节字符集(如UTF-8&#xff…

【C++】初识类和对象

引言 在C语言中,我们用结构体来描述一个复杂的对象,这个对象可能包括许多的成员,如用结构体描述一个学生的成绩,或者描述一个日期等。 struct Date {int _year;int _month;int _day; }; 如上是一个描述日期的结构体定义&#x…

week2day1 列表操作()

一. 列表相关操作 1.列表支持的数学运算符: a . 、* 列表1 列表2 将两个列表合并成一个新的列表 list [10,20,30] list2 [340,50,60] print(list list2) [10, 20, 30, 340, 50, 60]b. 列表 *N / N* (N是正整数) 将列表中的元素重复…

vue常用指令有哪些

Vue常用的指令包括: v-model:实现双向数据绑定,用于表单元素的值与Vue实例的数据属性进行关联。v-if、v-else-if、v-else:用于条件性地渲染DOM元素,根据表达式的真假来决定是否渲染元素。v-show:通过改变C…

超融合基础架构理解

1 超融合基础架构 1.1 定义 超融合基础架构(Hyper-converged infrastructure,缩写为HCI),是一种集成了存储设备及虚拟运算的信息基础架构框架。在这样的架构环境中,同一厂商的服务器与存储等硬件单元,搭配…

【网站项目】基于SSM的263货物进销管理系统

🙊作者简介:多年一线开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

探索Docker-Compose:从基础到高级命令全解析

探索Docker-Compose:从基础到高级命令全解析 引言Docker-Compose基础1. Docker-Compose简介2. 安装Docker-Compose3. 编写第一个Compose文件4. 基本命令 Docker-Compose文件结构解析1. 理解docker-compose.yml2. 基本组件3. 文件示例4. 配置项解析 常用Docker-Compo…

洛谷P1319 压缩技术(C语言)

这样一道入门题目,本来可以用for循环直接操作,但作者异想天开(xian de dan teng)地把所有数据登记在一个数组里面,然后再统一按格式输出。也就是定义一个数组Map,大小为n成n,然后按照输入数据,把Map中每一个…

【50.2K⭐】Tabby:一款强大、灵活且跨平台的免费终端应用程序

【50.2K⭐】Tabby:一款强大、灵活且跨平台的免费终端应用程序 在快节奏的现代生活中,我们总是在寻找提高工作效率的方法。如果你是一位开发人员,或者是一个对技术充满好奇心的电脑爱好者,我们经常需要在 Windows 上进行远程操作与…

加密机授权报错如何排查?进入加密机后台的方式介绍

我们在此前的文章中介绍过不少TSINGSEE青犀视频安防监控视频平台关于加密机授权操作及相关疑问解答,感兴趣的用户可以翻阅往期的文章进行了解。由于新用户咨询该方面的问题较多,今天我们再来介绍一下用户在使用过程中遇到的问题。 1、如何进入加密机后台…

Vue-33、Vue中为什么使用render函数

1、main.js //该文件是整个项目的入口文件 //引入Vue import Vue from vue //引入APP组件,他是所有组件的父组件 import App from ./App.vue //关闭Vue是生产提示 Vue.config.productionTip false; //创建Vue实例对象---vm new Vue({render: h > h(App), }).$m…

2024中国(杭州)国际冷链物流与冷库建设技术展览会

2024中国(杭州)国际冷链物流与冷库建设技术展览会 地点:杭州国际博览中心 时间:2024年7月8日-10日 ■组展背景: 冷链物流行业作为现代物流行业的重要组成部分,近年来发展迅速。导及相关部委高度重视国内…

笔试面试题——二叉树进阶(二)

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、二叉搜索树与双向链表1、题目讲解2、思路讲解递归展开图3、代码实现 二、从前序遍历和中序…