接口和接口之间的区别抽象类只有抽象方法

时间:2014-03-05 10:44:29

标签: inheritance interface abstract-class abstract-methods

假设我们有一个接口很少的方法声明&类似的方法(在接口中声明)在抽象类中声明为抽象方法。两者都将起到同样的作用,如继承和强制实现基类中的所有方法。 那么他们之间的关键区别是什么呢?通常在采访中被问到。

4 个答案:

答案 0 :(得分:1)

具有所有抽象方法和界面的抽象类有两个主要区别。

 1. Multiple Inheritance. - Your class can inherit as more than one interface. 
 But this is not possible to inherit multiple class in c# because famous diamond problem.

 2. Interface will help you to Dependency Injection Problem. 
 You can check DI problem here -

What is dependency injection?

答案 1 :(得分:0)

不同语言的差异不同。

在Java中,您可以从一个抽象类派生一个类,但是从/和MANY接口派生一个类。在Java 8中,接口也可以有默认方法,它们和抽象类之间的差异几乎是唯一的。

在SmallTalk中根本没有使用接口,因为所有类都可以作为接口使用。

在C ++中,区别并不明显,您可以随意使用抽象类或接口。接口有一个抽象类的例子。

不要忘记,由于有两个父类的技术问题,出现了界面。而你在谈论理论。在抽象理论中,除了课堂之外不需要界面,你的问题就会失去意义。真正的OOP语言也是如同SmallTalk一样。

答案 2 :(得分:0)

我认为这个问题与JAVA或C#有关。在C ++中,抽象类也称为接口。但是让我们坚持接口和抽象类之间的差异(在JAVA中,让我们说):

  1. 接口和抽象类提供了一系列方法,这些方法必须在使用之前进行扩展。
  2. 只有通过接口支持多重继承:您可以扩展多个接口,但只能从一个类继承(也适用于抽象类)
  3. 抽象类可以为其他方法和抽象提供实现,而接口只提供必须在扩展它们的类中实现的抽象。
  4. 哪一个更好?这取决于你的申请。例如,一些设计模式适用于其他更适合抽象类的接口

答案 3 :(得分:0)

嗯,在C#中,据我所知,Abstract类与所有方法都是抽象的,并且是一个接口。从这些继承的类(抽象类或接口)必须实现声明的方法。

但是在从Interface继承的情况下,您可以拥有多个Interfaces,但对于抽象类,您只能拥有一个。

因此,不要让抽象类只有抽象方法,而是将其声明为Interface。

但是,如果要限制接口之间的继承,请将它们都声明为仅使用抽象方法的抽象类,以便使用者只能从其中任何一个继承。