我在stackoverflow上看到了很多答案,但我没有找到与我匹配的答案。 除了所有这些差异之外,如果我们说抽象类抽象行为的实现,而接口抽象实现行为的类型,那么它是否有意义。
答案 0 :(得分:4)
抽象类可以(并且通常会)提供一些实现。
接口无法提供任何实现。
答案 1 :(得分:2)
与设计观点的主要区别在于:
所以我会说你在语句中是正确的,“抽象类抽象行为的实现,而接口抽象实现行为的类型”
抽象类:提供了实现某些方法的要求(你覆盖抽象类的方法)
界面:仅定义合同。表示实现接口的类具有接口的方法(您实现接口)
例如:
通过在现有类上实现接口,您只需声明将接口方法添加到类的合同中。该类可能已经实现了接口的所有方法,您无需更改现有类中的任何内容。
通过将基类型更改为抽象类,您需要覆盖所有方法,即使类型上已存在与基类的抽象方法具有相同名称的方法。
< / LI>答案 2 :(得分:0)
不是真的没有,因为抽象类不需要实现任何行为。它可能应该,因为否则你可能会认为它的用处,但它不必须。
答案 3 :(得分:0)
通常,抽象类实现某些行为,但保留一些未实现的特殊行为。
例如,您可能编写一个实现网络应用程序服务器的类,但不实现流程函数,而是将其留给继承的类来实现。
class MyServer(Networkserver):
// process() is called whenever a client has sent a request
function process(data):
...
通过使类抽象而无法实例化,专业化函数不必具有某种适当的“默认”行为。
答案 4 :(得分:0)
Interface =纯抽象类(没有实现的抽象类)
答案 5 :(得分:0)
纯粹从设计的角度来看,并且与语言无关,接口是您的类和客户之间的契约,承诺它的作用,而不是它是如何做的。这是“程序到界面”中隐含的用法。
由于C ++等语言没有接口,因此抽象类是表示接口的唯一方法。对于接口是第一类构造的语言,任何一种方式都是可以接受的,并且在选择中存在权衡。当然,语言之间在实现方面存在其他技术差异,但我不相信你问过这些。
有an interview with Erich Gamma,其中讨论了一些差异。
要回答你的问题,我认为从理论的角度来看这是有道理的。从实际的角度来看,它可能取决于您编程的语言:)
答案 6 :(得分:0)
两者都具有根据语言设计的特定用途 - 抽象类被设计为基类并且无法实例化。当你需要定义一个合同(NO实现)时,每个实现类必须以自己的方式遵循,那么你必须使用interfaces.Also -
可以是继承的基类
抽象类 - 是接口 - 否
可以有效吗
抽象类 - 是接口-No