2010-09-13 113 views
3

可能重复:
Interface vs Abstract Class (general OO)抽象类和接口之间有什么区别?

我可以永远实例化一个抽象类?如果是这样,为什么我不把所有非密封类抽象化?

如果我不能实例化它,那么与接口有什么不同?抽象类是否具有“基础”类功能?接口和抽象类之间的区别是否还有更多?

+3

**这是一个巨型重复的人。不要回答。它将被关闭并删除。** – 2010-09-13 16:46:18

+0

@John Saunders - 对不起,重复。虽然看起来可能不像,但我在发帖之前搜索了一个有此问题的问题(我发现有几个很接近,但不是上面那个)。无论如何,我的糟糕。我会在下次尝试更努力的搜索。 – Vaccano 2010-09-13 16:50:30

+0

这不是针对你。这是针对那些很快回答问题的人,却没有意识到它必须是重复的。 – 2010-09-13 17:04:24

回答

0

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

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 
4

接口不提供实现。你也可以实现多个接口。

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

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

1

抽象类:

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

  2. 当非抽象类继承自摘要 类时,非抽象类应为继承的抽象方法提供所有 实现。

接口:

  1. 接口也不过是纯粹的抽象类即 接口只能包含函数声明。

  2. 接口的所有成员默认为公共 并且您不能提供任何访问修饰符。

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

0

接口定义了一个合约,你说你会对一组特定的方法签名有所暗示。

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

7

你不能实例化一个抽象类。

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

相关问题