【问题标题】:When to use Interface and when to use Abstract class [duplicate]何时使用接口以及何时使用抽象类 [重复]
【发布时间】:2014-06-16 17:27:13
【问题描述】:

大家能解释一下我应该在什么条件下使用接口,在什么条件下我应该更喜欢抽象类...?请记住,我不是在问接口和抽象类之间的区别。

【问题讨论】:

  • 我想说的是:“支持协作而不是继承”这几乎可以解释为永远不需要抽象类......
  • 抽象类在很多情况下都很有用...您必须了解每种情况下哪种情况最能解决要解决的问题。

标签: java user-interface polymorphism abstract-class


【解决方案1】:

如果你发现了任何对象之间的关系,你可以使用abstract 例如:Bird, Aeroplane, Paper Rocket这些都是可飞行的,但是这些对象之间没有任何Is a relationship,所以你可以在这里使用interface而不是abstract, 因为鸟、飞机、纸火箭都是可以飞的,只是飞行的方式不同。

当然,谷歌有很多不同之处。

【讨论】:

    【解决方案2】:

    在以下情况下使用Abstract class:您有一些必须在一个地方实现的通用功能(方法),而其他具体类只能使用它。

    在以下情况下使用Interface:没有通用功能。每个具体类都有自己的功能实现。

    【讨论】:

      【解决方案3】:

      我建议遵守以下规则:

      • 仅使用抽象类,如果您需要code-reuse
      • 限制对定义抽象类的包的可见性

      否则使用接口和委托。但是就像软件设计一样,您必须针对每种具体情况做出正确的决定。如果您有必须应用但需要一定灵活性的限制/规则,请考虑使用策略模式而不是继承。

      抽象类的问题是你不能从多个继承。因此,如果您需要is 类型为AB 且都是抽象类的类型,您如何实现呢?接口可以不受限制地由任何其他类型实现。

      【讨论】:

        【解决方案4】:

        我们必须优先考虑。如果我们必须在该类中编写一些通用功能,那么只有这样你才能使用抽象类。否则使用接口。因为我们可以实现多个接口,但我们只能扩展一个类,所以将来你必须选择接口而不是抽象类。

        【讨论】:

        • 继承除了共享公共代码还有其他用途。
        • 请解释一下,我会得到更多的澄清
        • Read this answer 和其他链接...
        猜你喜欢
        • 2012-03-26
        • 2011-06-25
        • 2011-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-25
        • 2010-11-16
        • 2015-02-15
        相关资源
        最近更新 更多