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