深度网址导航
深度网址导航(deepdh.com)是国内首屈一指的导航分类平台,收录国内外各类型网站供网友检索,深度网址导航致力于为广大用户推荐各行各业优秀网站,国内外网站大全尽在深度导航。
多态就是类的同一行为,在不同对象上有不同的实现方式,这个也是Java面试中最常被问的。面向对象三大特性有封装、继承、多态。
下面重点关注一下多态,记录于此,方便自己查阅。
父类引用指向子类对象,调用方法时执行的是子类的方法。
Animal a = new Dog(); a.speak(); // 输出:汪汪
虽然变量类型是Animal,但实际执行的是Dog的行为。
同一行为,在不同对象上有不同的实现方式
继承(或实现接口)
方法重写(Override)
父类引用指向子类对象
缺一不可。
方法重写
class Animal { void speak() { System.out.println("动物叫"); } } class Dog extends Animal { @Override void speak() { System.out.println("汪汪"); } } //调用 Animal a = new Dog(); a.speak(); // 汪汪
接口多态
interface Payment { void pay(); } class WeChatPay implements Payment { public void pay() { System.out.println("微信支付"); } } class AliPay implements Payment { public void pay() { System.out.println("支付宝支付"); } } //调用 Payment p = new WeChatPay(); p.pay();
向上转型
Animal a = new Dog(); // 安全向下转型(强制)
Dog d = (Dog) a;若类型不匹配会抛异常:
Cat c = (Cat) a; // ClassCastExceptionvoid pay(Payment p) { p.pay(); }
新增支付方式无需改代码。
对扩展开放
对修改关闭
开闭原则
List<String> list = new ArrayList<>();面向接口编程,而不是具体实现。
| 对比点 | 多态(Override) | 重载(Overload) |
|---|---|---|
| 发生时机 | 运行期 | 编译期 |
| 方法签名 | 相同 | 不同 |
| 绑定方式 | 动态绑定 | 静态绑定 |
| 是否属于多态 | ✅ 是 | ❌ 不算真正的多态 |
提高代码扩展性、可维护性,降低模块间耦合,是面向对象设计的核心思想。
依靠 继承 / 接口 + 方法重写 + 父类引用指向子类对象 + JVM 动态绑定。
❌ 不可以
构造方法不能被继承,也不能被重写
Java 多态 = 父类引用指向子类对象 + 运行时动态绑定方法,是解耦和扩展的关键。