【问题标题】:When shall we go for interface or abstract class in Java? [duplicate]我们什么时候应该在 Java 中使用接口或抽象类? [复制]
【发布时间】:2011-09-24 06:50:02
【问题描述】:

可能重复:
When to use an interface instead of an abstract class and vice versa?

谁能告诉我在什么情况下我们应该使用接口和抽象类。

欢迎 Java 特定方面。

【问题讨论】:

    标签: java


    【解决方案1】:
    【解决方案2】:

    简单的语言:

    如果您希望通过常用方式访问对象,请使用接口。 如果要在超类中定义某些功能并定义必须在子类中覆盖的某些方法的原型,即扩展类的功能,请使用抽象类。 这是一个有趣的例子,可以帮助你理清基础。

    http://ganeshtiwaridotcomdotnp.blogspot.com/2011/05/understanding-importance-of-interface.html

    【讨论】:

      【解决方案3】:

      接口只是public 方法签名和public static final 字段的集合。没有构造函数,没有受保护/内部方法,没有其他类型的字段。

      另一方面,只要将abstract 放在其声明的前面,任何类都可以是抽象的。他们可以在不定义方法实现的情况下声明抽象方法并实现接口和其他抽象类。

      在继承方面,抽象类的限制更大(只有一个人可以继承子类),但您可以在其中实现方法和构造函数。

      一个类可以实现任意数量的接口,但没有默认的方法和构造函数实现。

      这就是为什么在接口旁边提供一个抽象类作为默认实现选项总是一个好主意。

      【讨论】:

        【解决方案4】:

        除非你需要,否则总是使用接口...

        • ...为子类提供一些状态
        • ...为子类提供一些方法的默认实现
        • ...想要推迟实现一些抽象方法

        请注意,您只能扩展一个类,而可以实现多个接口。因此,如果子类有可能需要扩展其他类,请尽量使用接口。

        这里有一些很好的讨论这个话题的链接:

        【讨论】:

          【解决方案5】:

          如果您想为子类扩展提供部分实现,您将使用抽象类,如果您只想提供必须实现的方法的签名,您将使用接口。 提供接口实现部分抽象类是完全正常的。

          但是,抽象类有一个限制:在子类中,您只能扩展一个(抽象)类,但您可以在单个类中实现任意数量的接口。

          【讨论】:

            【解决方案6】:

            如果您不想实现任何方法而只想定义您的合同,那么您可以使用接口。

            但是,如果您确实希望已经有一些实现,则应该使用抽象类。

            【讨论】:

              猜你喜欢
              • 2022-01-02
              • 2012-12-13
              • 1970-01-01
              • 2012-05-23
              • 2012-01-05
              • 1970-01-01
              • 2013-06-23
              • 2014-08-31
              • 1970-01-01
              相关资源
              最近更新 更多