多态---继承的产物

什么是多态

继承的直接结果是--代码复用:子类可以方便地复用父类的代码。 而多态就是继承的另一直接结果了:子类可以通过重写父类的方法,达到同一基类的对象拥有不同的动作的效果。

多态的使用原则

角色要纯粹。重写父类的方法目的不是为了引入与子类不相关的其他逻辑。这么做的目的是为了提高子类代码的可重用性。 当需要复用某个子类时,不需要把它引入的不相关依赖一并引入。当子类中确实需要处理一些不相关逻辑时, 用拦截器的方式(AOP)。

至于文中提到的四种场景:

  1. 父类有部分public方法不需要,也不允许子类重写(但子类需要调用)
  2. 父类的有些方法必须要子类去重写,父类的方法其实是个空方法
  3. 父类的有一些方法是可选重写,一旦重写,以子类为准
  4. 父类有一些方法即便被重写,父类原方法还是要执行的

我认为,第2种确实可以通过IOP来替代多态,强制子类必须实现, 第4种也可以通过IOP在父类中规定执行顺序。其他2种用多态的方式未尝不可。各人习惯而已,没必要非用IOP。尤其是第3种,这简直就是多态的设计初衷。另外对于2中提到的父类中的空方法,这本身也不是个问题。iOS的UIViewController中提供的很多方法也是空方法。

Ref

原文在这里

原文地址:https://www.cnblogs.com/mindyme/p/4682222.html