首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >抽象类与接口的区别

抽象类与接口的区别
EN

Stack Overflow用户
提问于 2010-09-03 12:15:21
回答 3查看 10.6K关注 0票数 6

可能重复:

Interface vs Base class

我不理解抽象类和接口之间的区别。我什么时候需要使用哪一种类型的艺术?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-03 12:18:26

当我们创建接口时,我们基本上是在创建一组方法,而没有任何实现必须被实现的类覆盖。其优点是它提供了一种使类成为两个类的一部分的方法:一个来自继承层次结构,另一个来自接口。

创建抽象类时,我们创建的基类可能包含一个或多个已完成的方法,但至少有一个或多个方法未完成并声明为抽象。如果抽象类的所有方法都未完成,那么它与接口相同。抽象类的目的是为一组派生类的工作方式提供基类定义,然后允许程序员在派生类中填充实现。

票数 13
EN

Stack Overflow用户

发布于 2010-09-03 12:28:08

试着这样想:

抽象类创建"is-a“关系。大众汽车是一辆汽车。

一个接口创建一个“可以做”的关系。弗雷德可以IDrive。

此外,弗雷德可以IDrive,但弗雷德是一个人。

票数 17
EN

Stack Overflow用户

发布于 2010-09-03 12:18:06

抽象类可能包含一些抽象方法和一些非抽象方法。他们的东西(有相关的代码)。如果一个新的非抽象类,子类它必须实现抽象方法的抽象类。

也就是。

代码语言:javascript
复制
public abstract class A {
    public string sayHi() { return "hi"; } // a method with code in it
    public abstract string sayHello();  // no implementation
}

public class B 
   : A
{
    // must implement, since it is not abstract
    public override string sayHello() { return "Hello from B"; }
}

接口更像是一个协议。实现该接口的类必须具有的方法列表。但是他们什么都不做。他们只有方法原型。

代码语言:javascript
复制
public interface A
{
    string sayHi(); // no implementation (code) allowed
    string sayHello();  // no implementation (code) allowed
}

public class B
    : A
{
     // must implement both methods
    string sayHi() { return "hi"; }
    string sayHello() { return "hello"; }
}

由于C++中没有协议/接口,所以两者都经常被混淆。因此,用该语言模拟接口行为的方法是编写一个纯虚拟类(一个只有纯虚拟函数的类)。

代码语言:javascript
复制
class A {
    virtual int a() = 0;  // pure virtual function (no implementation)
} 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3635589

复制
相关文章

相似问题

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