【JAVASE】带你了解面向对象三大特性之一(多态),面向对象三大特性之一,多态详解(JAVASE)

马肤

温馨提示:这篇文章已超过454天没有更新,请注意相关的内容是否还可用!

摘要:本文将介绍Java面向对象编程中的三大特性之一——多态。多态是面向对象编程中的重要概念,它允许一个对象以不同的形态表现,具有多种形态的功能。本文将详细解释多态的概念、实现方式和作用,通过实例让读者深入了解多态在Java编程中的应用,以便更好地掌握面向对象编程技术。

作者介绍

大家好,我是橘橙黄又青,一个热衷于与大家共同进步的男人😉😉

个人主页

再无B~U~G-CSDN博客

多态

1 多态的概念

多态就是多种形态,就是去完成某个行为时,不同的对象去完成会产生不同的状态。

2 多态实现条件

在Java中要实现多态,必须满足以下条件:

1、必须在继承体系下。

2、子类必须对父类方法进行重写。

3、通过父类的引用调用重写的方法。

3 重写(override)

重写(override)也称为覆盖,重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写,返回值和形参都不能改变,重写的好处在于子类可以根据需要,定义特定于自己的行为。

方法重写的规则:

1、访问权限不能比父类中被重写的方法的访问权限更低。

【JAVASE】带你了解面向对象三大特性之一(多态),面向对象三大特性之一,多态详解(JAVASE) 第1张

2、子类在重写父类的方法时,方法名、参数列表必须相同。

3、被重写的方法的返回值类型可以是父类方法返回值类型的子类型。

【JAVASE】带你了解面向对象三大特性之一(多态),面向对象三大特性之一,多态详解(JAVASE) 第2张

4、父类被static、private修饰的方法、构造方法都不能被重写。

5、重写的方法可以使用@Override注解来显式指定。

【JAVASE】带你了解面向对象三大特性之一(多态),面向对象三大特性之一,多态详解(JAVASE) 第3张

4 向上转型和向下转型

4.1 向上转型

实际就是创建一个子类对象,将其当成父类对象来使用,语法格式:父类类型 对象名 = new 子类类型()。

4.2 向下转型

将一个子类对象经过向上转型之后当成父类方法使用,再无法调用子类特有的方法,但可能需要调用子类特有的方法时,将父类引用再还原为子类对象即可,但向下转型用的比较少,而且不安全,万一转换失败,运行时就会抛异常,Java中为了提高向下转型的安全性,引入了instanceof,如果该表达式为true,则可以安全转换。

【JAVASE】带你了解面向对象三大特性之一(多态),面向对象三大特性之一,多态详解(JAVASE) 第4张

多态的优缺点

假设有如下代码:

【使用多态的好处】

【JAVASE】带你了解面向对象三大特性之一(多态),面向对象三大特性之一,多态详解(JAVASE) 第5张

1、能够降低代码的 "圈复杂度",避免使用大量的if-else,如果现在需要打印的不是一个形状了,而是多个形状,如果使用多态,则不必写这么多的if-else分支语句,代码更简单。

2、可扩展能力更强,如果要新增一种新的形状,使用多态的方式代码改动成本也比较低。

【JAVASE】带你了解面向对象三大特性之一(多态),面向对象三大特性之一,多态详解(JAVASE) 第6张

【多态缺陷】

1、属性没有多态性,当父类和子类都有同名属性的时候,通过父类引用,只能引用父类自己的成员属性。

【JAVASE】带你了解面向对象三大特性之一(多态),面向对象三大特性之一,多态详解(JAVASE) 第7张

2、构造方法没有多态性。

3、避免在构造方法中调用重写的方法,因为在构造对象的同时,会调用父类的构造方法,如果在父类的构造方法中调用了重写的方法,此时会触发动态绑定,可能会调用到子类的该方法,而此时子类对象还没构造完成,可能会导致一些问题。

【JAVASE】带你了解面向对象三大特性之一(多态),面向对象三大特性之一,多态详解(JAVASE) 第8张

多态是面向对象编程的三大特性之一,它使得程序有更好的扩展性和复用性,但在使用多态时,也需要注意一些细节问题,如避免在构造方法中调用重写的方法等。


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码