使用抽象类还是接口(Java)

“要针对接口编程,不要针对实现编程。”那么,在java的世界里,这里的接口指的是什么呢?无非是以下两种实现方式:

方式1)抽象类(只能有一个超类)

方式2)接口Interface(可以继承多个Interface)

 

那么何时使用抽象类,何时使用接口呢?回答这个问题,得搞清楚二者各自的优势。说白了是为了更好的应对变化。

一个是接口本身的变化,一个是接口实现的变化。

对于Interface而言,能够很好的应对接口实现的变化,但是很难应对接口本身的变化。一旦Interface发生变化,所有的实现都需要同时变化。如果实现类很多,那将是噩梦,甚至是不可行。

对于抽象类而言,接口本身的变化可以轻松应对。只要在抽象类中提供默认实现就可以轻松增加行为。

但是,我们也要看到,抽象类的实现存在短处。就是实现类必须对抽象类忠心不二。如果需要以另一种视角来看待同一个实现类,就只能使用Interface了。换句话说,Interface带来了多角度的好处。

 

Interface和抽象类并不是互斥的。你可以提供一个接口说“你可以使用这些功能”,在提供一个超类说“这是一种实现方式”。此时使用者应该应用接口类型,这样未来的维护者就可以根据需要随时替换新的实现。

posted @ 2013-09-17 14:25  挨踢灰太狼  阅读(374)  评论(0编辑  收藏  举报