在 Java 中,什么时候用重载,什么时候用重写
重载
- 概念: 重载是在同一个类中,有多个同名的方法,但参数类型、数量或顺序不同。
- 目的: 提供多种方式调用同一名称的方法,以适应不同的场景。
- 应用: 当需要以统一的方式来处理不同类型的数据时,可以用重载。
重写
- 概念: 重写发生在继承关系中,子类重新定义父类的方法。
- 目的: 子类可以根据自己的需求,改变或扩展父类的行为。
- 应用: 当子类需要增加新的功能,或者改变父类方法的行为时,可以使用重写。
简单总结:
- 重载: 提供多种方法签名。目的是提高程序的多样性和健壮性,以适配不同场景使用时,使用重载进行扩展;
- 重写: 增强剂,在不修改原方法的基础上增强或改变行为。
生活例子:
- 想吃一碗面,给你提供了拉面、炒面、刀削面等选项,这是重载。
- 不仅端来了面条,还加了青菜、鸡蛋等配料,这是重写。
设计模式:
- Cglib实现动态代理的核心原理就是方法的重写。
详细解答:
- 重载的应用场景: 构造器的重载是最常见的应用场景之一,比如Spring框架中的
ClassPathXmlApplicationContext
类,其构造函数使用重载提供了多种初始化方式。 - 重写的应用场景: 子类可以通过重写父类的方法来扩展或修改父类的功能,比如Cglib动态代理中,代理类会重写目标类的方法。
总结:
- 重载必须修改方法的形参列表,返回值类型不能修改,访问权限也不能更严格。
- 重写只能用于子类对父类方法的扩展或修改,不能抛出比父类方法声明的异常更多的异常。
里氏替换原则:
- 子类应尽可能不要重写和重载父类的方法,除非必要。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了