Java面向对象. 多态

目录

java多态是什么东西?首先要理解什么是多态

Java多态指同一行为具有多个不同表现形式。如父类引用指向子类对象,调用重写方法时呈现不同结果。

1.多态的概念

一、多态的基本概念

二、多态的实现方式

接口实现

三、多态的好处

提高代码的可扩展性

2.多态的运用

继承和多态:通过继承实现多态,即子类对象可以替换父类对象并调用父类的方法。这样,在不改变原有代码的情况下,可以通过添加新的子类对象来扩展功能。

接口和多态:接口定义了一组方法的规范,不同的类可以实现同一个接口并提供自己的具体实现。通过接口,可以统一对不同的类对象进行操作,并调用相同的方法。

方法重载和多态:方法重载是指在一个类中定义多个同名但参数列表不同的方法。通过方法重载,可以根据传入的参数类型和个数的不同来选择调用不同的方法。

泛型和多态:泛型是一种参数化类型的机制,可以在定义类、接口和方法时使用类型参数。通过泛型,可以编写通用的代码,适用于不同类型的对象。

多态的运用主要用处:

3.instanceof   

instanceof的运用主要包括以下几个方面:

多态判断:在多态中,可以使用instanceof来判断一个对象是否是某个父类的实例。通过这种方式,可以在运行时动态地确定对象的类型,并根据不同的类型执行不同的操作。

接口判断:除了类的判断,instanceof也可以用于判断一个对象是否实现了某个接口。可以通过instanceof来判断对象是否属于某个接口的实例,以便进行相应的操作。


java多态是什么东西?首先要理解什么是多态

Java多态指同一行为具有多个不同表现形式。如父类引用指向子类对象,调用重写方法时呈现不同结果。

1.多态的概念

一、多态的基本概念


在Java中,多态(Polymorphism)是面向对象编程的一个重要概念。多态字面上的意思是“多种形态”。它允许不同类的对象对同一消息做出不同的响应。

二、多态的实现方式


方法重写(Override)
当子类继承父类时,可以重写父类中的方法。例如,有一个父类 Animal ,其中有一个 makeSound() 方法,代码可能如下:

 
class Animal {public void makeSound() {System.out.println("Animal makes a sound");}
}


 
然后有一个子类 Dog ,它重写了 makeSound() 方法:
 

class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("Dog barks");}
}


 
当我们创建一个 Dog 对象并调用 makeSound() 方法时,它执行的是 Dog 类中重写后的方法,而不是 Animal 类中的方法。


接口实现


接口定义了一组方法签名,但没有方法体。一个类可以实现一个或多个接口。例如,有一个 Flyable 接口:
 

interface Flyable {void fly();
}


 
然后有类 Bird 和 Plane 都实现了 Flyable 接口:
 

class Bird implements Flyable {@Overridepublic void fly() {System.out.println("Bird flies with wings");}
}class Plane implements Flyable {@Overridepublic void fly() {System.out.println("Plane flies with engines");}
}


 
这里 Bird 和 Plane 对 fly 方法有不同的实现,这是多态的一种体现。


三、多态的好处


提高代码的可扩展性



假设我们有一个处理 Animal 对象的方法,在不改变这个方法的代码的情况下,可以很容易地将新的 Animal 子类对象传递进去,只要这些子类正确重写了相关方法
 

class Zoo {public static void main(String[] args) {Animal animal1 = new Dog();Animal animal2 = new Cat();makeAnimalSound(animal1);makeAnimalSound(animal2);}public static void makeAnimalSound(Animal animal) {animal.makeSound();}
}


 
如果以后创建了新的 Animal 子类,如 Rabbit ,只要 Rabbit 重写了 makeSound() 方法,就可以直接将 Rabbit 对象传递给 makeAnimalSound 方法。
 

2.多态的运用

多态是面向对象编程中的重要概念,它允许通过不同的对象以统一的方式调用同一个方法或函数。

多态的运用主要体现:

  1. 继承和多态:通过继承实现多态,即子类对象可以替换父类对象并调用父类的方法。这样,在不改变原有代码的情况下,可以通过添加新的子类对象来扩展功能。

  2. 接口和多态:接口定义了一组方法的规范,不同的类可以实现同一个接口并提供自己的具体实现。通过接口,可以统一对不同的类对象进行操作,并调用相同的方法。

  3. 方法重载和多态:方法重载是指在一个类中定义多个同名但参数列表不同的方法。通过方法重载,可以根据传入的参数类型和个数的不同来选择调用不同的方法。

  4. 泛型和多态:泛型是一种参数化类型的机制,可以在定义类、接口和方法时使用类型参数。通过泛型,可以编写通用的代码,适用于不同类型的对象。

多态的运用主要用处:

可以提高代码的灵活性、可扩展性和复用性,降低代码的耦合度。

3.instanceof   

instanceof是Java中的一个运算符,用于判断一个对象是否属于某个类或其子类的实例。

对象 instanceof 类名

对象是要进行判断的对象,类名是要判断的类或接口。

instanceof的运用主要包括以下几个方面:

  1. 多态判断:在多态中,可以使用instanceof来判断一个对象是否是某个父类的实例。通过这种方式,可以在运行时动态地确定对象的类型,并根据不同的类型执行不同的操作。

  2. 接口判断:除了类的判断,instanceof也可以用于判断一个对象是否实现了某个接口。可以通过instanceof来判断对象是否属于某个接口的实例,以便进行相应的操作。

使用instanceof可以在程序中根据对象的类型进行不同的处理逻辑,以提高代码的灵活性和可扩展性.

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

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

相关文章

医学机器学习:数据预处理、超参数调优与模型比较的实用分析

摘要 本文介绍了医学中的机器学习,重点阐述了数据预处理、超参数调优和模型比较的技术。在数据预处理方面,包括数据收集与整理、处理缺失值、特征工程等内容,以确保数据质量和可用性。超参数调优对模型性能至关重要,介绍了多种调…

SystemUI 下拉框 Build 版本信息去掉

需求及场景 去掉SystemUI 下拉框 Build 版本信息 如下图所示:去掉 12 (SP1A.201812.016) 了解 去掉之前我们先了解它是个什么东西:其实就是一个Build RTM 信息显示 Android_12_build_SP1A.210812.016 修改文件 /frameworks/base/packages/Syste…

transformer学习笔记-词嵌入embedding原理

.在学习transformer的时候,可以看到,输入通常需要对词token进行embedding处理,如果没有先了解embedding的原理可能会有疑问,这个embedding,到底怎么来的,怎么就把一个token 变成一个矩阵,这个矩…

Apache Airflow 快速入门教程

Apache Airflow已经成为Python生态系统中管道编排的事实上的库。与类似的解决方案相反,由于它的简单性和可扩展性,它已经获得了普及。在本文中,我将尝试概述它的主要概念,并让您清楚地了解何时以及如何使用它。 Airflow应用场景 …

python+django自动化部署日志采用‌WebSocket前端实时展示

一、开发环境搭建和配置 # channels是一个用于在Django中实现WebSocket、HTTP/2和其他异步协议的库。 pip install channels#channels-redis是一个用于在Django Channels中使用Redis作为后台存储的库。它可以用于处理#WebSocket连接的持久化和消息传递。 pip install channels…

[MySQL]流程控制语句

流程控制语句需要借助存储过程才有效。关于存储过程,我会在后续的文章详述,本篇文章只是阐述流程控制语句。因此,大家只需要注意存储过程中相应的流程控制语句即可。 如果文中阐述不全或不对的,多多交流。 参考笔记三&#xff0c…

使用 pycharm 新建使用 conda 虚拟 python 环境的工程

1. conda 常见命令复习: conda env list // 查看 conda 环境列表 conda activate xxxenv // 进入指定 conda 环境2. 环境展示: 2.1. 我的物理环境的 Python 版本为 3.10.9: 2.2. 我的 conda 虚拟环境 env_yolov9_python_3_8 中的 pyth…

上传镜像docker hub登不上和docker desktop的etx4.vhdx占用空间很大等解决办法

平时使用docker一般都在Linux服务器上,但这次需要将镜像上传到docker hub上,但是服务器上一直无法登录本人的账号,(这里的问题应该docker 网络配置中没有开代理的问题,因服务器上有其他用户使用,不可能直接…

混乱原理与程序设计。

混乱原理就是:对于每一种管控方案,都会对应到一个规模极限和一个效率适配范围;所谓规模极限,就是超过极限就必然会发生失控、产生混乱;适配效率是指极限规模增加必然导致效率降低、成本增加。 在开发语言中&#xff0c…

时频转换 | Matlab基于S变换S-transform一维数据转二维图像方法

目录 基本介绍程序设计参考资料获取方式基本介绍 时频转换 | Matlab基于S变换S-transform一维数据转二维图像方法 程序设计 clear clc % close all load x.mat % 导入数据 x =

【娱乐项目】竖式算术器

Demo介绍 一个加减法随机数生成器,它能够生成随机的加减法题目,并且支持用户输入答案。系统会根据用户输入的答案判断是否正确,统计正确和错误的次数,并显示历史记录和错题记录。该工具适合用于数学练习,尤其适合练习基…

Java抛出自定义运行运行

1.重新生成异常的.java文件 Empty:空 Exception:异常 加起来就是 空指针异常的文件 2.打上extends 运行的异常(异常的类型) 3.点击ctrlo,选着这两个快捷重写 4.在需要抛出异常的地方写上:th…

使用Github Action将Docker镜像转存到阿里云私有仓库,供国内服务器使用,免费易用

文章目录 一、前言二、 工具准备:三、最终效果示例四、具体步骤第一大部分是配置阿里云1. 首先登录阿里云容器镜像服务 [服务地址](https://cr.console.aliyun.com/cn-hangzhou/instances)2. 选择个人版本3. 创建 命名空间4. 进入访问凭证来查看,用户名字…

YOLO系列论文综述(从YOLOv1到YOLOv11)【第13篇:YOLOv10——实时端到端物体检测】

YOLOv10 1 摘要2 网络结构3 YOLOv1-v10对比 YOLO系列博文: 【第1篇:概述物体检测算法发展史、YOLO应用领域、评价指标和NMS】【第2篇:YOLO系列论文、代码和主要优缺点汇总】【第3篇:YOLOv1——YOLO的开山之作】【第4篇&#xff1a…

Cursor AI快捷键的使用场景及作用

快捷键 Cursor AI 编辑器提供了一系列快捷键,以提高开发者的编程效率和体验。以下是几个常用的快捷键及其使用场景和作用: Ctrl L 或 CMD L: 使用场景:打开对话框,用于与 AI 进行交互。作用:通过对话框&…

Figma入门-自动布局

Figma入门-自动布局 前言 在之前的工作中,大家的原型图都是使用 Axure 制作的,印象中 Figma 一直是个专业设计软件。 最近,很多产品朋友告诉我,很多原型图都开始用Figma制作了,并且很多组件都是内置的,对…

《Java核心技术I》队列与双端队列以及优先队列

队列与双端队列 队列允许你高效的在尾部添加元素,并在头部删除元素。 双端队列(deque):允许在头部和尾部都高效的添加或删除元素,不支持在中间添加元素。ArrayDeque和LinkedList实现了这个接口。 以下是两个接口的API: java.util.Queue 5…

零基础学安全--Burp Suite(4)proxy模块以及漏洞测试理论

目录 学习连接 一些思路 proxy模块 所在位置 功能简介 使用例子 抓包有一个很重要的点,就是我们可以看到一些在浏览器中看不到的传参点,传参点越多就意味着攻击面越广 学习连接 声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可…

CAD 文件 批量转为PDF或批量打印

CAD 文件 批量转为PDF或批量打印,还是比较稳定的 1.需要本地安装CAD软件 2.通过 Everything 搜索工具搜索,DWG To PDF.pc3 ,获取到文件目录 ,替换到代码中, originalValue ACADPref.PrinterConfigPath \ r"C:…

【Linux网络编程】TCP套接字

TCP与UDP的区别: udp是无连接的、面向数据报(通信时以数据报为单位传输)的传输层通信协议,其中每个数据报都是独立的,通信之前不需要建立连接,bind绑定套接字后直接可以进行通信。 tcp是面向连接的、基于字…