java多态

Java多态主要解决代码耦合度高、扩展性差的问题,核心是让程序依赖抽象而非具体实现,从而支持"对扩展开放,对修改关闭"。

解决的核心问题

问题 说明
代码重复 避免为每种类型写重复的分支判断
耦合严重 调用方无需知道对象的具体类型
扩展困难 新增类型时无需修改现有代码
可维护差 逻辑分散在各处,一改多处动

经典示例:支付系统

不用多态(问题代码):

java 复制代码
public class OrderService {
    public void pay(String type) {
        if ("alipay".equals(type)) {
            // 20行支付宝逻辑
        } else if ("wechat".equals(type)) {
            // 20行微信逻辑  
        } else if ("card".equals(type)) {
            // 20行银行卡逻辑
        }
        // 每加一种支付,都要改这里!
    }
}

使用多态:

java 复制代码
// 1. 抽象
public interface Payment {
    void pay(BigDecimal amount);
}

// 2. 具体实现(新增时只加这个)
public class Alipay implements Payment {
    public void pay(BigDecimal amount) {
        // 支付宝逻辑
    }
}

public class WechatPay implements Payment {
    public void pay(BigDecimal amount) {
        // 微信逻辑
    }
}

// 3. 调用方完全解耦
public class OrderService {
    public void pay(Payment payment, BigDecimal amount) {
        payment.pay(amount);  // 自动调用实际类型的方法
    }
}

// 使用
OrderService service = new OrderService();
service.pay(new Alipay(), new BigDecimal("100"));    // 支付宝
service.pay(new WechatPay(), new BigDecimal("100")); // 微信

多态的三种体现

java 复制代码
// 1. 方法重写(Override)------ 运行时多态
Animal a = new Dog();  // 父类引用指向子类对象
a.speak();  // "汪汪" ------ 实际调用Dog的方法

// 2. 方法重载(Overload)------ 编译时多态
void print(int x) { }
void print(String s) { }

// 3. 接口实现
List<String> list = new ArrayList<>();  // 面向接口编程

实际应用场景

场景 多态的作用
Spring依赖注入 UserService 注入不同实现的 UserDao
JDBC Connection conn = DriverManager.getConnection(...) 不同数据库驱动
日志框架 Logger 可以是 Logback、Log4j2 等
策略模式 排序算法切换、折扣规则切换

一句话总结: 多态让你写一次通用逻辑,未来新类型自动适配,代码像搭积木一样扩展。

相关推荐
江江爱编程4 分钟前
java零基础保姆级教学01
java·开发语言
9624565 分钟前
餐饮 SaaS 优惠券系统架构演进(三):优惠计算引擎——商品级计价、冲突策略与优惠分摊
java·数据库·spring boot
vx_Biye_Design8 分钟前
expressDeepSeek社团咨询助手的学生社团管理系统60746-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·课程设计·express
vx_Biye_Design22 分钟前
springboot宠物领养与救助平台64334-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·课程设计·宠物
泡茶喝茶写代码25 分钟前
A股量化数据工程:从 REST 接口到策略信号(第 5 篇):板块成分股映射与对齐
java·python·股票数据api·股票数据·股票数据api接口·股票api数据接口·股票量化数据接口
沐晓时光25 分钟前
C语言入门,深入理解指针(2)
c语言·开发语言
vx_Biye_Design25 分钟前
django就业信息推荐系统61953-计算机课程设计、毕业设计
java·vue.js·spring boot·python·架构·django·课程设计
零基础12335 分钟前
VoiceStudio 开源项目深度解析:特性、对比与实战测试
人工智能·经验分享·python·开源
2601_9628857239 分钟前
如何用 Python 做均线粘合选股?(多头发散前的变盘候选)
开发语言·python
zhangzeyuaaa41 分钟前
Ruby 方法参数完全指南:默认值、可变参数与关键字参数
前端·python·ruby