接口继承和实现继承的区别
Posted
技术标签:
【中文标题】接口继承和实现继承的区别【英文标题】:difference between interface inheritance and implementation inheritance 【发布时间】:2010-09-22 22:53:02 【问题描述】:我在迈耶斯的书中找到了这两个术语,但有什么区别?
【问题讨论】:
【参考方案1】:接口继承是公有继承,实现继承是私有继承。
如果B类公开继承于A,B是一个 A:它继承了A的整个接口,一个B对象的(引用/指针)可以自动向上转换到A,并在需要 A 的对象的任何地方使用。但是,如果 B 私有地从 A 继承,则 B is-implemented-in-terms-of A:只有 A 的实现被继承,不它的接口。因此(指向)B 对象的(引用/指针)不能在需要 A 对象的地方使用。
更新
为了反映 @Michal 的评论,这里有一些链接(主要基于 googling "c++ implementation inheritance")来展示这些术语在 C++ 上下文中的常见用法:
C++ Design/Coding tips - Part 7 Interfaces Uses and Abuses of Inheritance, Part 1【讨论】:
请注意,private
继承只能在非常有限的情况下使用(主要是:虚拟覆盖/空基优化)。 “根据以下方式实现”关系最好通过组合来实现。【参考方案2】:
实现(或类)继承是指在基类中分离实现的公共部分。
接口继承是你使用虚方法的时候。它旨在将接口与实现分离,并最大限度地减少程序元素之间的依赖关系。
【讨论】:
你的陈述在几个方面是不正确的:1)你不需要在派生类中添加任何新的字段/方法来继承它的实现,2)你不需要继承的虚拟方法类的接口,在公共继承的情况下默认发生。 已更正 1) 更准确。 exforsys.com/tutorials/csharp/inheritance-in-csharp.html支持我的定义 再次注意这是 C++,而不是 C# :-) C++ 作为一种语言甚至不包含 interface 的概念 - 实际上它是作为一个仅包含纯虚方法。【参考方案3】:主要区别在于接口是公共继承,实现是私有继承。 公共和受保护部分的数据成员和方法将在公共继承中各自的访问说明符中从基类继承到派生类。同时派生类的对象可以像普通方法一样访问基类的数据成员. public 和 protected 部分的数据成员和方法将在私有访问说明符中从基类继承到派生类
【讨论】:
以上是关于接口继承和实现继承的区别的主要内容,如果未能解决你的问题,请参考以下文章