抽象类和接口有什么区别?

时间:2010-09-13 16:41:58

标签: c# interface abstract-class

  

可能重复:
  Interface vs Abstract Class (general OO)

我可以实例化一个Abstract类吗?如果是这样,为什么我不会将所有非密封类抽象出来?

如果我无法实例化它,那么界面有什么区别?抽象类可以具有“基类”功能吗?接口和抽象类之间的区别还有什么呢?

6 个答案:

答案 0 :(得分:7)

您无法实例化抽象类。

抽象类和接口之间的区别在于抽象类可以具有方法的默认实现,因此如果不在派生类中重写它们,则使用抽象基类实现。接口不能有任何实现。

答案 1 :(得分:4)

接口不提供实现。您还可以实现多个接口。

您可以在抽象类中提供实现,但只能从一个基类型继承。

在任何一种情况下,都不能直接实例化任何一个。

答案 2 :(得分:1)

您无法直接创建抽象类的实例。但是,您可以提供方法和/或属性实现,这些方法和/或属性实现在接口中无法执行。此外,您只能继承一个类,抽象或其他类,而您可以继承(实现)任意数量的接口。

abstract class A 
{
    public int Foo() { return 1; } // implementation defined
}

class B : A 
{
}

interface C
{
    int Foo() {return 1;} // not legal, cannot provide implementation in interface
}

// ... somewhere else in code

A a = new A(); // not legal
A a = new B(); // legal

答案 3 :(得分:1)

抽象类:

  1. 抽象类可以包含抽象方法和非 摘要方法。

  2. 从抽象继承非抽象类时 类,非抽象类应提供所有 继承的抽象方法的实现。

  3. 接口:

    1. 界面只不过是纯抽象类,即 接口只能包含函数声明。

    2. 界面的所有成员都是Public by Default 并且您无法提供任何访问修饰符。

    3. 当一个类从接口继承时, 继承类应该提供实际的实现 继承的成员。

答案 4 :(得分:0)

首先:你只能从一个抽象类继承。您可以将多个接口连接到类。

答案 5 :(得分:0)

接口定义了一个合同,你说你将保证对一组特定方法签名的限制。

抽象类只是意味着你不能直接创建它的新实例,你可以自由使用任何其他类功能,即属性。