news 2026/6/24 6:20:25

什么是多态

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
什么是多态

多态

什么是多态呢?说白就是子类的多种形态,这里说到了子类的多种形态,那么一定就要考虑到,要想有多态,就需要有继承结构,这是前提条件

以下就是多态的格式

父类类型 变量名 = new 子类/实现类构造器;
变量名.方法名();

口诀:父类引用指向子类对象,调用方法时看具体对象,不看引用类型

为了更好的理解,我在下面举个例子,比如我们要设计一个支付系统,分为微信支付和支付宝支付

这里定义了一个支付的父类接口

package Test; public interface Payment { void pay(Long amount); }

微信支付类,实现该接口

package Test; public class WechatPay implements Payment{ @Override public void pay(Long amount) { System.out.println("使用微信支付,支付了"+ amount+ "元"); } }

支付宝类,实现该接口

package Test; public class Alipay implements Payment{ @Override public void pay(Long amount) { System.out.println("使用支付宝支付,支付了"+ amount+ "元"); } }

运行多态

public class PayService { public static void main(String[] args) { //微信支付 WechatPay wechatPay = new WechatPay(); executePayment(wechatPay,100L); //支付宝支付 Alipay alipay = new Alipay(); checkoutService.checkout(alipay,12000L); } public static void executePayment(Payment payment, Long amount){ payment.pay(amount); } }

多态的运行特点

在调用成员变量的时候,就遵循一个规则就是编译看左边,运行也看左边

而在调用成员方法的时候,也遵循一个规则就是编译看左边,运行也看右边

可见以下分析图:

多态的优势与弊端

多态的优势,其一就是降低代码的耦合性,这个已经在上面说过了

接下来,我们说一下多态的弊端

多态的这种写法不能调用子类当中的特有的方法

我们应该怎么解决呢

这就需要的到我们之前强制类型转换的思想,但是这个强转,一定要对应相应的类型,不能瞎转,否则会抛出异常

这里还有个小细节就是如果你不知道别人写的多态是什么类型,那么这个时候,我们就需要对这个多态做判断

如fu f=new zi1

fu f=new zi2

if(f 是 zi1){

对zi1进行强转

}else if(f 是 zi2){

对zi2进行强转

}

这里就要涉及到

instanceof关键字

if(f instanceof zi1){

对zi1进行强转

}else if(f instanceof zi2){

对zi2进行强转

}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/24 6:17:41

VibeThinker-3B-GGUF快速入门指南:5分钟部署你的推理AI助手

VibeThinker-3B-GGUF快速入门指南:5分钟部署你的推理AI助手 【免费下载链接】VibeThinker-3B-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/prithivMLmods/VibeThinker-3B-GGUF 想要在本地快速部署一个强大的推理AI助手吗?VibeThinker-3B-…

作者头像 李华
网站建设 2026/6/24 6:13:29

CANN/runtime模型流切换示例

2_model_switch 【免费下载链接】runtime 本项目提供CANN运行时组件和维测功能组件。 项目地址: https://gitcode.com/cann/runtime Description This sample demonstrates how to use aclmdlRIBuildBegin interface to create a model instance, and implements Strea…

作者头像 李华
网站建设 2026/6/24 6:12:50

Javinizer元数据聚合策略:多源数据合并与优先级设置技巧

Javinizer元数据聚合策略:多源数据合并与优先级设置技巧 【免费下载链接】Javinizer (NSFW) Organize your local Japanese Adult Video (JAV) library 项目地址: https://gitcode.com/gh_mirrors/ja/Javinizer Javinizer是一款功能强大的日本成人视频库管理…

作者头像 李华