为什么接口不能继承纯抽象类

Pav*_*ari 2 .net c# abstract-class interface

众所周知,一个接口可以继承另一个接口,而接口只能包含方法签名.

interface A
{
    void DoWorkA()
    { }
}

interface B : A
{
    void DoWorkB()
    { }
}
Run Code Online (Sandbox Code Playgroud)

现在实现接口B的类需要提供两个函数体.

public class ABC : B
{
    public void DoWorkB()
    {
        //do some work
    }

    public void DoWorkA()
    {
        //do some work
    }
 }
Run Code Online (Sandbox Code Playgroud)

那么为什么不能将接口继承为抽象类或普通类.

因此,如果接口继承了抽象类,则实现此接口的类需要提供抽象类的所有接口和抽象方法的实现.

为什么这是不可能的.

Ale*_*nov 9

接口和类之间的主要区别在于接口只提供签名而不是实现.如果继承类的接口继承了它的实现,它将提供实现而不再是接口.


Tig*_*ran 5

因为接口是语言定义的契约.它是用于描述合同的特定于语言的类型:因此您可以聚合不同的合同(从一个接口继承另一个接口),但合同本身不能扩展某些东西.

抽象类,可以包含实现:

//PERFECTLY VALID ABSTRACT CLASS DEFINITION
public abstract class A {

    public abstract void Overridable(); //ABSRTACT

    public void DoSomething() {
       //METHOD BODY
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,从语言设计和OPP观点来看,从可能(通常)具有实现的东西继承接口是没有意义的.