【发布时间】:2011-09-24 06:50:02
【问题描述】:
可能重复:
When to use an interface instead of an abstract class and vice versa?
谁能告诉我在什么情况下我们应该使用接口和抽象类。
欢迎 Java 特定方面。
【问题讨论】:
标签: java
可能重复:
When to use an interface instead of an abstract class and vice versa?
谁能告诉我在什么情况下我们应该使用接口和抽象类。
欢迎 Java 特定方面。
【问题讨论】:
标签: java
简单的语言:
如果您希望通过常用方式访问对象,请使用接口。 如果要在超类中定义某些功能并定义必须在子类中覆盖的某些方法的原型,即扩展类的功能,请使用抽象类。 这是一个有趣的例子,可以帮助你理清基础。
http://ganeshtiwaridotcomdotnp.blogspot.com/2011/05/understanding-importance-of-interface.html
【讨论】:
接口只是public 方法签名和public static final 字段的集合。没有构造函数,没有受保护/内部方法,没有其他类型的字段。
另一方面,只要将abstract 放在其声明的前面,任何类都可以是抽象的。他们可以在不定义方法实现的情况下声明抽象方法并实现接口和其他抽象类。
在继承方面,抽象类的限制更大(只有一个人可以继承子类),但您可以在其中实现方法和构造函数。
一个类可以实现任意数量的接口,但没有默认的方法和构造函数实现。
这就是为什么在接口旁边提供一个抽象类作为默认实现选项总是一个好主意。
【讨论】:
除非你需要,否则总是使用接口...
请注意,您只能扩展一个类,而可以实现多个接口。因此,如果子类有可能需要扩展其他类,请尽量使用接口。
这里有一些很好的讨论这个话题的链接:
【讨论】:
如果您想为子类扩展提供部分实现,您将使用抽象类,如果您只想提供必须实现的方法的签名,您将使用接口。 提供接口和实现部分抽象类是完全正常的。
但是,抽象类有一个限制:在子类中,您只能扩展一个(抽象)类,但您可以在单个类中实现任意数量的接口。
【讨论】:
如果您不想实现任何方法而只想定义您的合同,那么您可以使用接口。
但是,如果您确实希望已经有一些实现,则应该使用抽象类。
【讨论】: