IIWAB

面向对象编程,多态

IIWAB 2月前 ⋅ 125 阅读

多态(面向对象三大特性:封装、继承、多态)

1. 核心定义

同一个行为,作用在不同对象上,表现出不同的实现效果。 简单一句话:一个接口,多种实现

多态建立在两个基础之上:

  1. 存在继承 / 实现关系(子类、实现类)
  2. 方法重写(子类重写父类方法)

2. 两大分类

(1)编译时多态(静态多态)

程序编译阶段就确定调用哪个方法,依靠方法重载实现。

  • 规则:同一个类中,方法名相同,参数个数/类型/顺序不同
  • 例子:
void eat(){}
void eat(String food){}

编译器根据传入参数自动匹配对应方法。

(2)运行时多态(动态多态,日常说的多态多指这个)

程序运行时才判断对象真实类型,调用子类重写后的方法,依靠方法重写 + 向上转型。 示例逻辑:

  1. 父类动物,有 speak() 方法;
  2. 狗、猫继承动物,各自重写 speak()
  3. 父类引用指向子类对象:
Animal a1 = new Dog();
Animal a2 = new Cat();
a1.speak(); // 输出汪汪
a2.speak(); // 输出喵喵

同一个 speak() 调用,不同对象执行不同逻辑,这就是典型多态。

3. 多态的好处

  1. 代码解耦:上层代码只依赖父类/接口,不用关心具体子类;
  2. 易于扩展:新增子类无需修改原有调用代码;
  3. 统一调用入口:一套调用逻辑适配多种对象。

4. 结合你刚才学的继承补充

  • 特化继承、受限继承都会配合多态使用;
  • 接口继承天然就是为多态设计的,一个接口可以有无数实现类,全部多态调用。

极简

多态指同一消息发送给不同对象,产生不同执行结果;分为静态多态(重载)和动态多态(重写),动态多态依赖继承与方法重写。


全部评论: 0

    我有话说: