IIWAB

面向对象编程,继承的分类

IIWAB 2月前 ⋅ 143 阅读

一、

受限继承、特化继承、取代继承、包含继承,这四类是同一个维度:按「继承中包含的内容、子类对父类成员的处理方式」划分

划分维度标准

评判依据:子类拿到父类属性/方法后,做了什么处理(增、减、替换、特殊化),看子类最终拥有的内容范围、能力变化。

二、四类完整区分(同维度:继承内容处理方式)

1. 特化继承(Specialization)

核心:完整继承父类全部内容,在此基础上新增特性/细化行为,标准is-a关系,子类能力>父类。

  • 特点:不删减、不限制原有功能,只做扩充、具体化;符合里氏替换。
  • 例子:水果→苹果,苹果继承水果所有属性,额外增加产地、甜度属性。

2. 受限继承(Restriction / 限制继承)

核心:继承父类全部接口,但主动禁用、约束部分功能,属于“减法继承”,子类能力<父类。

  • 特点:父类有的功能,子类不让用、重写为空/抛异常,缩小可用范围。
  • 例子:可变列表 → 只读列表;只读列表继承所有查询方法,但禁用增删改操作。

3. 包含继承

核心:继承父类全部内容,再叠加其他类的能力,侧重代码复用,不一定严格is-a。

  • 例子:玩具鸟继承飞行器获取飞行方法,同时继承玩具类的灯光功能。

4. 取代继承

核心:子类完全替换父类行为,方法全部重写,功能等价、可无缝替换父对象。

  • 例子:通用支付类 → 微信支付子类,重写全部支付逻辑,上层代码无需改动。

三、容易混淆的两套不同划分维度

维度1:按继承包含的内容(4类:取代、包含、受限、特化)

判断标尺:子类如何处理父类继承来的成员(加、减、替换、扩展)。

维度2:按继承代码形式(2类:实现继承、接口继承)

判断标尺:继承的是带实现的类,还是仅方法签名的接口

维度3:按父类数量(单继承、多继承)

判断标尺:一个子类能有几个直接父类。

四、一句话区分特化 vs 受限(高频易混)

  • 特化继承:加东西,能力变多(正常扩展)
  • 受限继承:减/锁功能,能力变少(约束限制)

全部评论: 0

    我有话说: