里氏代换原则:子类型必须能够替换掉它们的父类。
    由于子类型的可替换性才使得使用父类类型的模块在无需修改的情况下就可以扩展,使得开放-封闭成为了可能。