抽象类和接口有啥区别? [复制]

     2023-02-22     184

关键词:

【中文标题】抽象类和接口有啥区别? [复制]【英文标题】:What's the difference between an abstract class and an interface? [duplicate]抽象类和接口有什么区别? [复制] 【发布时间】:2013-02-17 03:55:25 【问题描述】:

假设我们在一个接口中有两个方法M1()M2()。一个抽象类也有同样的两个抽象方法。如果任何类实现了该接口或继承自抽象类,则必须实现其中的两个方法。

所以对我来说,在我的场景中,接口或抽象类的行为似乎相同。那么,任何人都可以强调这两个在这种特定情况下之间的区别,并建议在这里使用抽象类还是接口?

【问题讨论】:

哈!也许我们可以结合我们所有的同时分析并分享代表。 ;-) Mate & llya 你能详细说明你的想法吗?假设我有一个接口 IMath,它包含两个方法 AddNumbers() 和 ConcatenateStrings()。这两个作为抽象方法也在抽象类 Math 中。现在你能建议我应该使用 IMath 还是 Math 吗? 【参考方案1】:

抽象类和接口之间存在技术差异,抽象类可以包含方法、字段、构造函数等的实现,而接口仅包含方法和属性原型。一个类可以实现多个接口,但它只能继承一个类(抽象或其他)。

但是,在我看来,接口和抽象类之间最重要的区别是语义上的区别。

接口定义了可以做什么(它的行为方式),而抽象类定义了某物是什么。

IEnumerable为例,这背后的语义是任何实现IEnumerable的东西都是可枚举的,并不意味着它是一个枚举,而是它可以表现得像一个(可以枚举)。

与洗衣机的例子相比,任何继承它的东西都是一种洗衣机。任何继承它的东西都是洗衣机、顶部装载机或侧装载机等。

相反,如果您有一个名为ICanWash 的接口,它可能包含一个名为Wash 的方法。你可以让各种东西实现ICanWash,无论是Person,一个抽象的洗衣机类等等,实际的实现并不重要,你只需要知道它的行为是它可以洗东西。

总而言之,类定义事物是什么,接口定义事物可以做什么。

【讨论】:

这就是我要找的。非常好的一点,因为这就是我认为的 OOP 的全部内容。【参考方案2】:

来自MSDN:

例如,通过使用接口,您可以包含来自 一个类中的多个来源。这种能力在 C# 中很重要 因为该语言不支持类的多重继承

因此,如果您希望任何类都可以继承该方法,请使用接口。

来自同一 MSDN 页面:

另外,如果要模拟,必须使用接口 结构的继承,因为它们实际上不能继承自 另一个结构或类。

【讨论】:

假设目前对它的继承没有明确的要求,那么选择哪一个呢? 更多示例:如果您想创建其他类可以实现的方法/属性,请使用接口。但是请记住,当您在接口中添加/删除方法时,您必须在所有实现该方法的类中执行相同的操作。在抽象类中,您可以添加/删除方法,这会影响继承抽象类的所有类【参考方案3】:

接口允许一个类继承/实现多个接口,而在 C# 中您只能从一个类继承。

基本上是多重继承。

【讨论】:

所以,我从这个讨论中得到最后的结论: 1. 接口定义了某物可以做什么(它的行为方式),一个抽象类定义了某物是什么。 2. 尽可能使用接口而不是抽象类。原因:如果你有一个类已经实现了一些接口并继承一个类。因此,在这种情况下,这个类将无法继承您的抽象类,因为多重继承受到限制。但是如果要实现接口就没有问题了。 非常正确,但是如果你实现了一个接口(在类声明中),你必须对其进行编码——别无选择。只是澄清一下以防万一。【参考方案4】:

抽象类不仅包含抽象方法,它还可以包含其他具有实现的字段和方法。在 C# 中,您不能从多个类继承,但您可以实现多个接口。所以简短的回答是: 尽可能使用接口而不是抽象类。 在您的示例中,建议使用接口。

【讨论】:

【参考方案5】:

关于接口和抽象类之间区别的两个快速思考:

    如果未来可能扩展,则需要抽象类,作为 抽象类可以扩展,但接口必须是 通过添加另一个接口 I2 来增强。 单(实现)继承方式选择抽象类 仔细地,最贴近地反映真实的基本性质。接口 可以很容易地添加到实现中,但是抽象类可以 仅当还没有时才添加。

【讨论】:

接口和抽象类有啥区别? [复制]

】接口和抽象类有啥区别?[复制]【英文标题】:What\'sthedifferencebetweenaninterfaceandanabstractclass?[duplicate]接口和抽象类有什么区别?[复制]【发布时间】:2010-10-1511:02:58【问题描述】:重复:Whentouseaninterfaceinsteadofanabstractclassandvicever... 查看详情

php中的抽象和接口有啥区别? [复制]

】php中的抽象和接口有啥区别?[复制]【英文标题】:Whatisthedifferencebetweenabstractandinterfaceinphp?[duplicate]php中的抽象和接口有什么区别?[复制]【发布时间】:2011-04-0408:59:57【问题描述】:可能重复:PHP:Whatisthedifferencebetweenaninterface... 查看详情

java 8中的接口和抽象有啥区别? [复制]

】java8中的接口和抽象有啥区别?[复制]【英文标题】:Whatisdifferencebetweeninterfaceandabstractioninjava8?[duplicate]java8中的接口和抽象有什么区别?[复制]【发布时间】:2019-03-0222:54:25【问题描述】:现在接口也有一些方法体作为抽象类... 查看详情

java8中的抽象类和接口到底有啥区别?

...别,故引发了此篇:在我们面试时也会经常遇到面试官问抽象类和接口的区别是什么,大部人肯定会说:接口中的所有方法都是抽象的,抽象类中的方法除了抽象方法还可以写实现方法,如果你还这样回答那你就OUT啦,要跟上形... 查看详情

Java中的接口和抽象类有啥区别? [复制]

】Java中的接口和抽象类有啥区别?[复制]【英文标题】:WhatisthedifferencebetweenaninterfaceandanabstractclassinJava?[duplicate]Java中的接口和抽象类有什么区别?[复制]【发布时间】:2012-04-2811:07:44【问题描述】:可能重复:Whatisthedifferencebetw... 查看详情

抽象类和静态类有啥区别?

】抽象类和静态类有啥区别?【英文标题】:What\'sthedifferencebetweenanabstractclassandastaticone?抽象类和静态类有什么区别?【发布时间】:2011-01-2408:22:00【问题描述】:两者都不是可实例化的。有什么区别?在什么情况下您可以使用... 查看详情

抽象类和只有受保护构造函数的类有啥区别? (。网)

】抽象类和只有受保护构造函数的类有啥区别?(。网)【英文标题】:What\'sthedifferencebetweenanabstractclass,andaclasswithonlyprotectedconstructors?(.NET)抽象类和只有受保护构造函数的类有什么区别?(。网)【发布时间】:2011-01-1316:07:27... 查看详情

抽象类和接口的区别

抽象类和接口的区别一、抽象类与接口的相同之处  1、抽象类和接口都不能被实例化,都用于被其他类实现或继承  2、他们都可以包含抽象方法,并且在其他类继承或实现的时候都必须实现这些抽象方法 二、抽象类与... 查看详情

使用类和接口有啥区别?

】使用类和接口有啥区别?【英文标题】:Whatsthedifferencebetweenusingaclassandinterface?使用类和接口有什么区别?【发布时间】:2018-01-0608:35:20【问题描述】:这样做有什么区别exportclassCommentlikes:string;comment:string;constructor(likes:string,com... 查看详情

抽象类和接口有什么区别

JDK7中抽象类和接口的区别JDK8新特性:接口的静态方法和默认方法 查看详情

抽象类和接口的区别

查看详情

抽象类和接口区别

简述抽象类和接口区别 ①   Abstract修饰符:抽象类不能省略;接口省略②   子类和实现类:抽象类的子类继承抽象类,单继承;接口的实现类实现接口,多实现;③   继承:抽象类单继承;... 查看详情

抽象类和接口的区别

1.抽象类中可以有普通成员变量,接口中没有普通成员变量。2.抽象类和接口中都可以包含静态成员变量,抽象类中静态成员变量的访问类型是任意的,接口中必须为(publicstaticfinal)(默认)。3.抽象类可以包含非抽象的普通方法,接... 查看详情

抽象类和接口的区别

接口和抽象类的区别:1.接口的所有方法都是抽象的,抽象类里面的方法可以是抽象的也可以不是抽象的;2.接口和抽象类都不能实例化,接口需要类来实现后实例化实现类,抽象类需要类来继承然后实例化子类;3.抽象类只能单... 查看详情

抽象类和接口的区别

抽象类和接口的对比参数抽象类接口默认的方法实现它可以有默认的方法实现接口完全是抽象的。它根本不存在方法的实现实现子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方... 查看详情

抽象类和接口的区别

抽象类和接口的对比参数抽象类接口默认的方法实现它可以有默认的方法实现接口完全是抽象的。它根本不存在方法的实现实现子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方... 查看详情

抽象类和接口的区别

...虑  1.成员变量:接口的成员变量默认publicstaticfinal,抽象类成员变量和普通类一样  2.构造方法:接口没有构造方法  3.成员方法:接口的成员方法默认publicabstract,有抽象方法的类一定是抽象类,抽象类不一定有抽象方... 查看详情

静态类和单例类设计模式有啥区别? [复制]

】静态类和单例类设计模式有啥区别?[复制]【英文标题】:Whatisthedifferencebetweenstaticclassandsingletonclassdesginpattern?[duplicate]静态类和单例类设计模式有什么区别?[复制]【发布时间】:2011-10-0317:24:05【问题描述】:可能重复:Differe... 查看详情