Inheritance 界面和;仅具有抽象方法的抽象类

Inheritance 界面和;仅具有抽象方法的抽象类,inheritance,interface,abstract-class,abstract-methods,Inheritance,Interface,Abstract Class,Abstract Methods,假设我们有一个方法声明很少的接口&类似的方法(在接口中声明)在抽象类中声明为抽象方法。这两种方法的作用与继承相同&在基类中强制实现所有方法。 那么它们之间的主要区别是什么呢。采访中常见的问题。不同语言的差异是不同的 在Java中,可以从一个抽象类派生一个类,但/和可以从许多接口派生。在Java8中,接口也可以有默认方法,它们和抽象类之间的区别几乎是唯一的 在SmallTalk中根本不使用接口,因为所有类都可以作为接口工作 C++中的差异并不明显,你可以随意使用抽象类或接口。接口有一个抽象类的例子

假设我们有一个方法声明很少的接口&类似的方法(在接口中声明)在抽象类中声明为抽象方法。这两种方法的作用与继承相同&在基类中强制实现所有方法。
那么它们之间的主要区别是什么呢。采访中常见的问题。

不同语言的差异是不同的

在Java中,可以从一个抽象类派生一个类,但/和可以从许多接口派生。在Java8中,接口也可以有默认方法,它们和抽象类之间的区别几乎是唯一的

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

C++中的差异并不明显,你可以随意使用抽象类或接口。接口有一个抽象类的例子


不要忘记,接口的出现是因为有两个父类的技术问题。你说的是理论。在抽象理论中,除了类之外不需要接口,您的问题就失去了意义。在真正的OOP语言中也是如此,比如SmallTalk。

我认为这个问题与JAVA或C有关。在C++中,抽象类也称为接口。但让我们继续讨论接口类和抽象类之间的区别(比如说,在JAVA中):

  • 接口和抽象类都提供了一系列方法和属性,这些方法和属性在使用之前必须进行扩展
  • 仅通过接口支持多重继承:您可以扩展多个接口,但只能从一个类继承(也适用于抽象类)
  • 抽象类可以提供某些方法的实现和其他方法的抽象,而接口只提供必须在扩展它们的类中实现的抽象
  • 哪一个更好?这取决于你的申请。例如,一些设计模式与接口配合得很好,而其他模式则更适合抽象类。就我所知,在C#中,所有方法都是抽象的抽象类与接口之间没有太大区别。从这些(抽象类或接口)继承的任何类都必须实现声明的方法

    但在从接口继承的情况下,可以有多个接口,但对于抽象类,只能有一个接口

    因此,与其让抽象类只有抽象方法,不如将其声明为接口


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

    具有所有抽象方法和接口的抽象类有两个主要区别

     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 -
    

    可能重复@marounnaroun它无论如何都不会重复,因为这里不是java问题!这是一个严格的java问题。这个问题在Java和Java之外有着完全不同的答案,它是w.r.t C#。我们可以通过使方法抽象化,使抽象类与接口工作相同,所以继承它的人必须实现该方法,那么有什么区别呢。它们是一样的吗?