为什么不推荐继承
继承是面向对象特性之一,可以解决代码复用问题。但是,如果继承层次过深,过复杂,反而会影响到代码的可维护性。并且,继承也破环了类的封装性,将父类的实现暴露给了子类。子类的实现依赖父类的实现,两者耦合度就高,一旦父类代码修改就会影响所有子类的代码逻辑。
层次过深,容易出现类爆炸现象, 如图所示:

组合比继承有哪些优势
不会破坏封装性、不会出现类的层次过多情况、更加灵活
什么时候使用组合,什么时候使用继承
虽然组合优于继承,但并不是完全不使用继承。如果类之间的继承结构稳定,父类和子类之间确实存在 “is-a” 关系,并且继承层次比较浅,继承关系不复杂,才适合用继承。反之,就尽量使用组合来代替继承。
为什么不推荐继承
继承是面向对象特性之一,可以解决代码复用问题。但是,如果继承层次过深,过复杂,反而会影响到代码的可维护性。并且,继承也破环了类的封装性,将父类的实现暴露给了子类。子类的实现依赖父类的实现,两者耦合度就高,一旦父类代码修改就会影响所有子类的代码逻辑。
层次过深,容易出现类爆炸现象, 如图所示:

组合比继承有哪些优势
不会破坏封装性、不会出现类的层次过多情况、更加灵活
什么时候使用组合,什么时候使用继承
虽然组合优于继承,但并不是完全不使用继承。如果类之间的继承结构稳定,父类和子类之间确实存在 “is-a” 关系,并且继承层次比较浅,继承关系不复杂,才适合用继承。反之,就尽量使用组合来代替继承。