假设我们有一个接口很少的方法声明&类似的方法(在接口中声明)在抽象类中声明为抽象方法。两者都将起到同样的作用,如继承和强制实现基类中的所有方法。 那么他们之间的关键区别是什么呢?通常在采访中被问到。
答案 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 -
答案 1 :(得分:0)
不同语言的差异不同。
在Java中,您可以从一个抽象类派生一个类,但是从/和MANY接口派生一个类。在Java 8中,接口也可以有默认方法,它们和抽象类之间的差异几乎是唯一的。
在SmallTalk中根本没有使用接口,因为所有类都可以作为接口使用。
在C ++中,区别并不明显,您可以随意使用抽象类或接口。接口有一个抽象类的例子。
不要忘记,由于有两个父类的技术问题,出现了界面。而你在谈论理论。在抽象理论中,除了课堂之外不需要界面,你的问题就会失去意义。真正的OOP语言也是如同SmallTalk一样。
答案 2 :(得分:0)
我认为这个问题与JAVA或C#有关。在C ++中,抽象类也称为接口。但是让我们坚持接口和抽象类之间的差异(在JAVA中,让我们说):
哪一个更好?这取决于你的申请。例如,一些设计模式适用于其他更适合抽象类的接口
答案 3 :(得分:0)
嗯,在C#中,据我所知,Abstract类与所有方法都是抽象的,并且是一个接口。从这些继承的类(抽象类或接口)必须实现声明的方法。
但是在从Interface继承的情况下,您可以拥有多个Interfaces,但对于抽象类,您只能拥有一个。
因此,不要让抽象类只有抽象方法,而是将其声明为Interface。
但是,如果要限制接口之间的继承,请将它们都声明为仅使用抽象方法的抽象类,以便使用者只能从其中任何一个继承。