【问题标题】:Why we use interface and abstract class and in which situation one should use abract class and interface [duplicate]为什么我们使用接口和抽象类,在什么情况下应该使用抽象类和接口[重复]
【发布时间】:2012-05-23 23:34:10
【问题描述】:

可能重复:
Use of Java [Interfaces / Abstract classes]

为什么我们使用接口和抽象类,在什么情况下应该使用抽象类和接口?谁能用最简单的例子来解释这个.....

【问题讨论】:

    标签: class interface abstract


    【解决方案1】:

    当您希望所有子类型实现不同的特定逻辑时,您希望使用接口,例如在这种情况下:

    interface GeometricalShape{
          # only abstract methods are allowed
          GetArea();
          GetPerimeter();
    }
    

    在这种情况下,每个几何形状都必须实现特定的逻辑来计算面积和周长。

    当您的子类型必须实现一些特定的逻辑时,您想使用抽象类,但您仍然拥有所有子类型共有的逻辑,例如这种情况:

    abstract class GeometricalShape{
          name;edgeCount;
          protected GeometricalShape(name,edgeCount)
    
          #abstract methods
          abstract GetArea();
          abstract GetPerimeter();
    
          #Concrete methods
          GetName(){return name;}
          GetEdgesCount(){return edgesCount}
    

    在此示例中,每个几何形状都必须像以前一样实现有关面积和周长的特定逻辑,但现在所有子类型将共享用于检索几何名称和边数的通用方法,这将是多余的定义在每个子类中。

    【讨论】:

    • 需要更清楚一些......我们也可以在界面中拥有共同的属性
    • 您不能在接口上定义非抽象方法。观察在每个子类中具有不同逻辑的抽象方法 GetArea() 与在所有子类中行为相同的 GetName() 之间的区别。
    • 我编辑了我的答案,所以现在我希望你能更好地理解接口只能允许抽象方法,而抽象类允许抽象方法但也允许具体方法的区别。
    • 我知道接口和抽象类之间的这种差异和其他差异,但在哪种情况下应该选择接口和抽象类
    • 在子类可以共享相同逻辑并使用接口的情况下,将意味着所有子类中的冗余重复代码,而不是实现和使用来自公共超类的代码。何时使用其中一个是正确的感觉问题。除了编写可读、高效且符合 OOP 实践的好代码之外,没有严格的规则。
    猜你喜欢
    • 1970-01-01
    • 2011-09-24
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2013-09-21
    • 1970-01-01
    • 2010-12-27
    相关资源
    最近更新 更多