首选方案

非最子级类构造函数中不调用自身函数⭐

  • 初始化操作直接在constructor中完成

缺点

  • 外界想要初始化只能再新建一个对象

最子级实现类不允许被继承

符合合成复用原则

组合代替继承

  • 不使用继承, 而是使用成员变量来组合父类到子类中

适用范围

  • 仅适用于最子级的实现类,抽象类和接口都不能采用该方案

缺点

  • 当父级链比较长的时候, 调用需要多级嵌套

备选方案

不允许子类重写指定方法

缺点:

  • 子类类似方法名字需要作区分
  • 被禁止重写的方法外界访问不了