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

什么是多态

多态

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

以下就是多态的格式

父类类型 变量名 = 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进行强转

}

http://www.jsqmd.com/news/1071131/

相关文章:

  • TensorFlow Data Validation 与Apache Beam集成:大规模数据验证的完整解决方案
  • 提升laravel-money性能:处理大量货币数据的优化技巧
  • 为什么选择Sing-Guard-8b-GGUF?六大安全基准测试表现全面领先
  • hspec版本升级指南:从旧版本迁移到2.x的注意事项
  • ComfyUI无缝集成:LTX-2.3-22b-IC-LoRA-Ingredients插件安装与配置终极指南
  • NV-Generate-MR部署指南:在NVIDIA GPU上运行医学影像生成模型
  • Fast与Fast-Slow模式怎么选?Sing-Guard-2b推理模式对比分析
  • AionUI性能优化全攻略:让本地AI助手运行如飞
  • 终极指南:ZLUDA如何让CUDA应用在AMD和Intel GPU上运行
  • HalfStyle插件扩展开发指南:构建自定义字符分割插件
  • OpenAgent数据集管理终极指南:文档上传、语义检索与知识库构建
  • Norse深度解析:10种脉冲神经元模型对比与应用场景
  • 免Root终极指南:LSPatch框架完整解析与快速上手
  • finetune_alexnet_with_tensorflow核心代码解析:alexnet.py中的网络结构实现
  • Caesonia反垃圾邮件策略:使用rspamd实现智能贝叶斯过滤
  • 如何快速上手cssplot:从安装到创建第一个柱状图的完整指南
  • Javinizer元数据聚合策略:多源数据合并与优先级设置技巧
  • 3大实战技巧:深度掌握TRL模型微调的核心价值
  • CANN/catlass GEMM内核开发详解
  • Easy-PHP:从零构建高性能轻量级PHP框架的完整指南 [特殊字符]
  • 3步搞定OrcaSlicer安装配置:新手快速上手3D打印切片终极指南
  • 开发者必看:Sing-Guard-2b API接口详解与集成示例
  • 950基础矩阵乘法TLA示例
  • Raylib即时模式GUI的底层架构解析:从状态管理到渲染优化的全链路技术实现
  • TruecallerJS错误处理与调试指南:常见问题排查与解决方案
  • Super Productivity容器化部署实战:构建企业级时间管理系统的技术架构解析
  • CANN/ge DataFlow Python开发指南附录
  • CANN/runtime模型流切换示例
  • Auto-evaluator错误处理与调试:常见问题解决方案的完整清单
  • CANN/runtime:资源限制内核执行示例