继承是Is-A的关系。曾经看到有人为了复用而使用了继承:有一个Base类,里面写了很多Common的方法,很多类继承自这个类,这种做饭就是把Has-A用Is-A来实现的。
继承的概念是说一个类是另一个类的特化。
Liskov替换原则:派生类必须能够通过基类的接口而被使用,且使用者无需了解两者之间的差异。该原则感觉下来是为了保证继承的语义没有变,这样便可以控制继承的复杂度。
针对继承的一些原则:
- 如果多个类共享数据而非行为,应该创建这些类可以包含的共用对象(Has-A)。
- 如果多个类共享行为而非数据,应该让它们从共同的基类继承而来,并在基类中定义共用的子程序,这里容易迷糊:这样做的前提是要看是不是Is-A的关系,如果不是,还是不建议使用继承,而是把这些共享的行为放入公用对象,然后引用这个共用对象。
- 如果多个类既共享数据也共享行为,应该让它们从一个共同的基类继承而来,基类中定义共用的数据和子程序
- 当想在基类中控制接口时,使用继承,当想自己控制接口时,使用包含。
- 避免让继承体系过深,不要超过三层,另外子类的数量建议7+—2
- 当大量出现switch、case时,可以考虑使用继承,使用多态健身case的类型check。
时间: 2024-10-09 08:49:39