【问题标题】:When to use Abstract Classes and Interfaces? [closed]何时使用抽象类和接口? [关闭]
【发布时间】:2023-04-03 03:13:02
【问题描述】:

我们为什么使用接口?

当我们实现一个接口时,我们必须为该接口的方法编写定义。 那么,需要实现什么接口呢?我们可以直接在类中写方法。

谢谢:)

【问题讨论】:

标签: java interface abstract-class


【解决方案1】:

一个例子可能对你有用,见下面的场景。

1.class A extends B{
..
..
..
}

当 A 扩展 B 并且您正在创建 A 新类 C 时,您不能使 A 与 B 一起扩展 C 所以go for Interface.

2.class A implements B {
..
..
}

如果你在B中添加一个新方法并且它(B)由100个类实现,很难在所有类中实现新方法,所以去抽象类并添加新方法框架实现。

如需进一步帮助,请阅读 Joshua Bloch 的 Effective Java

【讨论】:

    【解决方案2】:

    这更像是面试题——

    关于何时使用长期存在的东西的决定是与很多人讨论的问题之一,他们有自己的观点或支持这个或那个想法。我认为有一个基本规则几乎每次都有效:如果你能做出“A 是 B”的陈述,就使用抽象类和继承。如果您可以声明“A 能够 [doing] as”,或者也可以抽象为类是什么,接口表示类可以做什么,请使用接口。

    例如,我们可以说三角形是多边形,但说三角形能够成为多边形是没有意义的。

    无论如何,这方面的经验法则是:使用您的常识。有时一个接口更适合,即使上面的规则告诉你相反,如果是这样的话,它只是使用接口(当然在考虑后果之后)。

    【讨论】:

      【解决方案3】:

      你有一个方法被 N 个类使用。如果定义与每个类不同,请使用接口。

      假设一个方法对于 50 个类来说是相似的,而另外 50 个类有不同的行为意味着使用抽象类。在那里你定义方法。

      用于前 50 个类,其余 50 个类具有不同的行为,因此请根据类行为覆盖现有方法。
      示例

      Interface Graphics
      {
         void size();
         void draw();
      
      }
      
      Class Rectangle implements Graphics
      {
           void size()
           {
              x=10;
              y=10;
           }
          void draw()
          {
             .....
          }
      
      }
      class Triangle implements Graphics
      {
         void size()
           {
              x=10;
              y=10;
           }
          void draw()
          {
             .....
          }
      
      }
      

      所以两个类的大小相同,然后使用抽象

      abstract class Graphics
      {
         void size()
           {
              x=10;
              y=10;
           }
          abstract void draw();
      
      }
      

      那么如果任何类扩展了这个类,大小是相似的,只定义draw() 如果某些类需要不同的位置,则覆盖大小。

      【讨论】:

        猜你喜欢
        • 2010-11-16
        • 2015-06-27
        • 2015-01-10
        • 2017-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多