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

可能重复:
接口与抽象类(通用OO)

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

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

您无法实例化抽象类。

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

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

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

在任何一种情况下,您都无法直接实例化任何一个。

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

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 

抽象类:

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

  2. 当非抽象类inheritance自抽象类时,非抽象类应提供inheritance的抽象方法的所有实现。

接口:

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

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

  3. 当从接口inheritance类时,inheritance的类应该为inheritance的成员提供实际的实现。

一方面:您只能从一个抽象类inheritance。 您可以将多个接口连接到类。

界面定义了一个合同,你的意思是你将保证对一组特定方法签名的限制。

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