可能重复:
Interface vs Abstract Class (general OO)抽象类和接口之间有什么区别?
我可以永远实例化一个抽象类?如果是这样,为什么我不把所有非密封类抽象化?
如果我不能实例化它,那么与接口有什么不同?抽象类是否具有“基础”类功能?接口和抽象类之间的区别是否还有更多?
可能重复:
Interface vs Abstract Class (general OO)抽象类和接口之间有什么区别?
我可以永远实例化一个抽象类?如果是这样,为什么我不把所有非密封类抽象化?
如果我不能实例化它,那么与接口有什么不同?抽象类是否具有“基础”类功能?接口和抽象类之间的区别是否还有更多?
首先,您只能从一个抽象类继承。您可以将多个接口连接到一个类。
您不能直接创建抽象类的实例。但是,您可以提供方法和/或属性实现,这是您在界面中无法实现的。您也只能继承一个类,抽象或其他类,而您可以继承(实现)尽可能多的接口。
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
接口不提供实现。你也可以实现多个接口。
您可以在抽象类中提供实现,但只能从一个基类型继承。
无论在哪种情况下,都不能直接实例化任一个。
抽象类:
抽象类可以包含抽象方法和非 抽象方法。
当非抽象类继承自摘要 类时,非抽象类应为继承的抽象方法提供所有 实现。
接口:
接口也不过是纯粹的抽象类即 接口只能包含函数声明。
接口的所有成员默认为公共 并且您不能提供任何访问修饰符。
当一个类从接口继承时, 继承类应为继承成员提供 的实际实现。
接口定义了一个合约,你说你会对一组特定的方法签名有所暗示。
抽象类只是意味着你不能直接创建它的一个新实例,你可以自由使用任何其他类的特性,即属性。
你不能实例化一个抽象类。
抽象类和接口的区别在于抽象类可以有方法的默认实现,所以如果不在派生类中重写它们,就会使用抽象基类实现。接口不能有任何实现。
**这是一个巨型重复的人。不要回答。它将被关闭并删除。** – 2010-09-13 16:46:18
@John Saunders - 对不起,重复。虽然看起来可能不像,但我在发帖之前搜索了一个有此问题的问题(我发现有几个很接近,但不是上面那个)。无论如何,我的糟糕。我会在下次尝试更努力的搜索。 – Vaccano 2010-09-13 16:50:30
这不是针对你。这是针对那些很快回答问题的人,却没有意识到它必须是重复的。 – 2010-09-13 17:04:24