#青训营 x 字节后端训练营#
打卡day12
今天阅读了为什么rust和go会放弃继承,选择组合
继承和组合是面向对象编程中两种常见的代码重用方式。它们都可以实现代码的复用。两者最大的区别是继承关系的耦合度高,子类和父类之间是紧密耦合的关系。而组合对象之间的关系是松散的,修改一个对象不会影响到其他对象
在实际使用中,继承会遇到这样的问题:要设计一个关于车的类。按照面向对象编程的思想,我们将“车类”这样一个事务抽象成一个BaseCar类,默认有run的行为。那么所有车类都可以继承这个抽象类。比如,汽车,卡车等。上面的设计有三个隐患:
第一个,如果把基类的行为实现都放到基类里面,虽然能提高复用性,但是也会改变所有子类的功能,这也会导致代码的复杂性提升。
第二个点是,对于没有没有那些功能的对象,比如自行车,就不应该把修引擎的功能暴露到自行车类里面。
第三个点是,如果扩展到其他对象怎么办,比如说人也会跑,飞机也会跑。那么这个设计后面就不好扩展了,也不够灵活。
但其实我们可以通过先实现接口,然后通过组合、委托的方式来解决。这样代码就会清爽很多。