首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Liskov的替代原理是如何工作的,比如对象类?

Liskov的替代原理是如何工作的,比如对象类?
EN

Stack Overflow用户
提问于 2020-09-10 05:00:13
回答 1查看 591关注 0票数 0

简而言之,Liskov的替换原则规定,基类(超级)类的实例应该与其派生(子)类的实例完全可替换,而不引入任何“中断代码”,如抛出新错误、更改方法的契约等。

这意味着java.lang.Object应该是可替换的,它的任何子类的实例都应该随处可见。但是,每个类都是对象的子类型。

我可以实例化一个类,例如,NetworkAdapter,并将它作为一个对象传递。根据LSP,我应该能够将该Object实例转换为一个随机子类,比如Foo?然而,NetworkAdapterFoo完全不兼容的

代码语言:javascript
运行
复制
NetworkAdapter nA = new NetworkAdapter();
Object obj = (Object) nA;   // completely okay and legal
Foo foo = (Foo) obj;   // ??? this would throw ClassCastException!

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

EN

回答 1

Stack Overflow用户

发布于 2020-09-11 16:58:48

如果您想从铸造的角度考虑LSP,那么它将涉及到上播而不是下播。

您能安全地将NetworkAdapter传递给接受Object或子类是否违反父类契约的方法吗?违反Object合同的行为包括不正确地实施equalshashCode

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63823095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档