如何理解ClassMouse obj=new ClassDuck()

该问题来自社区帖: https://bbs.csdn.net/topics/616050321.为符合问答规范, 该问题经过ChatGPT优化

如何理解 ClassMouse obj=new ClassDuck()

ClassMouse是父类,ClassDuck是前者的子类。从名称看,这两个类不应该构成父子关系,不过也有特殊情况,比如最近的鸭脖事件。这是基于面向对象语言中的子类型多态,子类对象可以用其父类型替换。
里氏替换原则声明,在设计模块和类时,必须确保派生类型(即子类)从行为的角度来看是可替代的。当派生类型被其父类型替换时,其余代码就像它是子类型那样使用它。从这个角度来看,派生类型应该像其父类型那样表现,不应该破坏它的行为。这称为强行为子类型。