什么是多态

📅 2026/6/24 6:20:30
什么是多态
多态什么是多态呢说白就是子类的多种形态这里说到了子类的多种形态那么一定就要考虑到要想有多态就需要有继承结构这是前提条件以下就是多态的格式父类类型 变量名 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 fnew zi1fu fnew zi2if(f 是 zi1){对zi1进行强转}else if(f 是 zi2){对zi2进行强转}这里就要涉及到instanceof关键字if(f instanceof zi1){对zi1进行强转}else if(f instanceof zi2){对zi2进行强转}