多态(面向对象三大特性:封装、继承、多态)
1. 核心定义
同一个行为,作用在不同对象上,表现出不同的实现效果。 简单一句话:一个接口,多种实现。
多态建立在两个基础之上:
- 存在继承 / 实现关系(子类、实现类)
- 方法重写(子类重写父类方法)
2. 两大分类
(1)编译时多态(静态多态)
程序编译阶段就确定调用哪个方法,依靠方法重载实现。
- 规则:同一个类中,方法名相同,参数个数/类型/顺序不同
- 例子:
void eat(){}
void eat(String food){}
编译器根据传入参数自动匹配对应方法。
(2)运行时多态(动态多态,日常说的多态多指这个)
程序运行时才判断对象真实类型,调用子类重写后的方法,依靠方法重写 + 向上转型。 示例逻辑:
- 父类动物,有
speak()方法; - 狗、猫继承动物,各自重写
speak(); - 父类引用指向子类对象:
Animal a1 = new Dog();
Animal a2 = new Cat();
a1.speak(); // 输出汪汪
a2.speak(); // 输出喵喵
同一个 speak() 调用,不同对象执行不同逻辑,这就是典型多态。
3. 多态的好处
- 代码解耦:上层代码只依赖父类/接口,不用关心具体子类;
- 易于扩展:新增子类无需修改原有调用代码;
- 统一调用入口:一套调用逻辑适配多种对象。
4. 结合你刚才学的继承补充
- 特化继承、受限继承都会配合多态使用;
- 接口继承天然就是为多态设计的,一个接口可以有无数实现类,全部多态调用。
极简
多态指同一消息发送给不同对象,产生不同执行结果;分为静态多态(重载)和动态多态(重写),动态多态依赖继承与方法重写。
注意:本文归作者所有,未经作者允许,不得转载