我们何时应该使用Java中的接口或抽象类?
可能重复:
何时使用接口而不是抽象类,反之亦然?
任何人都可以告诉我在什么情况下我们应该去接口和抽象类。
Java特定方面是受欢迎的。
除非你需要……总是使用界面
- …提供具有某种状态的子类
- …为子类提供某些方法的默认实现
- …想要推迟一些抽象方法的实现
请注意,您只能扩展一个类,而您可以实现多个接口。 因此,如果子类有可能需要扩展其他类,请努力使用接口。
以下是一些讨论此主题的好链接:
- Java World:抽象类与接口
- 接口与抽象类(通用OO)
- 抽象类与接口
- Mindprod:接口与抽象类
用简单的语言:
如果希望以常用方式访问对象,请使用界面。 如果要在超类中定义某些function并定义必须在子类中重写的某些方法的原型(即扩展类的function),请使用抽象类。 这是一个有趣的例子,可以帮助您清除基本面。
http://ganeshtiwaridotcomdotnp.blogspot.com/2011/05/understanding-importance-of-interface.html
如果您不想实现任何方法而只想定义合同,那么您可以使用接口。
但是,如果您确实想要实现某些实现,则应使用抽象类。
如果要为要扩展的子类提供部分实现,则使用抽象类;如果只想提供必须实现的方法的签名,则使用接口。 提供both和接口以及实现其部分的抽象类是完全正常的。
然而,抽象类有一个限制:在子类中,您只能扩展一个(抽象)类,但您可以在单个类中实现任意数量的接口。
接口只是public
方法签名和public static final
字段的集合。 没有构造函数,没有受保护/内部方法,没有其他类型的字段。
另一方面,任何类都可以简单地通过在其声明前放置abstract
来抽象。 他们可以声明抽象方法并实现接口和其他抽象类,而无需定义方法实现。
当涉及到inheritance时,抽象类更具限制性(只有一个可以为父类创建),但是您可以在其中实现方法和构造函数。
可以通过类实现任意数量的接口,但是没有默认方法和构造函数实现。
这就是为什么在接口旁边提供一个抽象类作为默认实现选项总是一个好主意。