Liskov的“替换原理”如何对像Object这样的类起作用?

问题描述

简而言之,Liskov的“替换原理”指出,基类(超级类)的实例应该可以用其派生(子)类的实例完全替换,而不会引入任何“破坏性代码”,例如抛出新错误,更改方法的约定,等

这意味着java.lang.Object应该可以被任何地方的任何子类的实例替换。但是,每个类都是Object的子类型。

我可以实例化一个类,例如NetworkAdapter并将其作为对象传递,并且根据LSP,我应该能够将该Object实例转换为一个随机子类,例如{{ 1}}?但是,FooNetworkAdapter彼此完全不兼容

Foo

我理解LSP错误吗?还是Java语言的结构在某些情况下违反了LSP?

解决方法

如果您想在转换方面考虑LSP,那么它会关注的是上播而不是下播。

您能否安全地将NetworkAdapter传递给接受Object的方法,或者子类是否违反了父合同?违反Object合同将包括错误地实施equalshashCode

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...