为什么DAO设计时要写成接口而不是抽象类?

13-09-25 java4qdc
在JAVA EE中,我们设计DAO的时候,发现所有的项目都是写成接口形式,然后使用具体的DAO对象去实现这个接口,如:

public interface GenericDao<T> {

public List<T> findByID(Long id);

}

class UserDao implements GenericDao<User> {

@Override

public List<User> findByID(Long id) {

return null;

}

}

我的问题是:为什么DAO不采用抽象类的方式来写呢?

我个人认为DAO的设计可以采用抽象类的方式来做,如:

public abstract class GenericDao<T> {

public abstract List<T> findByID(Long id);

}

class UserDao extends GenericDao<User> {

@Override

public List<User> findByID(Long id) {

return null;

}

}

因为抽象类与子类的关系属于"is-a",而接口代表的是“协议”。

有些人说使用接口是为了避免只能单继承,我觉得这个说法不够说服力,请大家帮我解答一下,谢谢!

banq
2013-09-26 08:35
可以采取抽象类,Spring的JDBCtemp或HibernateTemp等都是使用模板抽象类。

猜你喜欢