首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重写是否取消了派生类作为基类的子类型的资格?

重写是否取消了派生类作为基类的子类型的资格?
EN

Stack Overflow用户
提问于 2017-10-01 22:16:08
回答 2查看 51关注 0票数 0

来自编程语言语用学,斯科特著

派生类D拥有它的基类C的所有成员--数据和子程序。只要D不隐藏任何公开可见的C成员,允许在任何期望类C对象的上下文中使用D类的对象是有意义的:我们可能想对C类的对象做的任何事情,我们也可以对类D的对象进行处理,换句话说,派生类不隐藏基类的任何公开可见成员就是这个基类的子类型。

如果D重写了C的公共方法,

  • D的重写方法是否隐藏了被重写的C方法,以及
  • 重写是否取消了D作为C子类型的资格?

是什么使派生类隐藏基类的公共方法?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-10-01 22:23:14

D的重写方法是否隐藏了C的重写方法?

不,重写与隐藏不同,因为您提供的是替换实现,而不是现有的实现,而不仅仅是删除没有任何替换的实现。

大多数面向对象语言不允许隐藏指定用于重写的方法(virtual of C++,abstractvirtual of C#)。有些语言根本不允许隐藏(Java)。这恰恰是为了确保从D模型继承C是-一种关系。

重写是否取消了D作为C的子类型的资格?

不,不需要。

票数 2
EN

Stack Overflow用户

发布于 2017-10-02 01:29:10

覆盖是否使D不再是C的子类型?

那得看情况。如果D中的方法违反了C中的方法定义的契约,那么是的,它将取消D作为子类型的资格。如果D方法支持相同的契约,那么它就不支持。

我建议你读一读利斯科夫替代原则。这是她1994年写的一篇文章。可读性很强。

subtypes.pdf

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

https://stackoverflow.com/questions/46517416

复制
相关文章

相似问题

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