When shall we go for interface or abstract class in Java?
Possible Duplicate:
When to use an interface instead of an abstract class and vice versa?
有谁能告诉我在什么情况下我们应该使用接口和抽象类吗?
欢迎使用Java特定的方面。
始终使用接口,除非需要…
- …为子类提供某种状态
- …为子类提供一些方法的默认实现
- …希望推迟一些抽象方法的实现
注意,您只能扩展一个类,而您可以实现多个接口。因此,如果子类有可能需要扩展其他类,那么就努力使用接口。
以下是讨论此主题的一些好链接:
- Java世界:抽象类与接口
- 接口与抽象类(常规OO)
- 抽象类与接口
- mindprod:接口与抽象类
简单语言:
如果您希望通过公共方式访问对象,请使用Interface。如果要在超级类中定义一些功能,并且要定义一些必须在子类中重写的方法的原型(即扩展类的功能),请使用抽象类。下面是一个有趣的例子,可以帮助你理清基本原理。
http://ganeshtiwaridotcmdotnp.blogspot.com/2011/05/understanding-importance-of-interface.html
接口只是
另一方面,只要将
抽象类在继承(只有一个可以作为子类的父类)方面限制更大,但您可以在其中实现方法和构造函数。
一个类可以实现任意数量的接口,但没有默认的方法和构造函数实现。
这就是为什么在接口旁边提供一个抽象类作为默认实现选项总是一个好主意。
如果希望为要扩展的子类提供部分实现,则将使用抽象类;如果只希望提供必须实现的方法的签名,则将使用接口。提供和接口以及实现部分接口的抽象类是完全正常的。
然而,抽象类有一个限制:在一个子类中,只能扩展一个(抽象)类,但是可以在一个类中实现任意多的接口。
检查这些
http://www.javaworld.com/javaworld/javaqa/2001-04/03-qa-0420-abstract.html
抽象类和接口
如果不想实现任何方法,只想定义契约,那么就使用一个接口。
但是,如果您确实希望已经有一些实现,那么应该使用一个抽象类。