一个接口有多个实现类,当调用接口中的方法时,如何判定用的是哪个实现类?
1. 直接new一个子类实例,这样肯定知道用的哪个实例。
2. 定义接口类型的变量,用某个实例去初始化,这样也可以确定用的哪个实例。
代码实例:
接口类:
public interface CsBaseService {
//获得总记录条数
public int getTotalCount(JDBCBean jdbcBean);
}
实现类一:
public class CsLastUpdateService implements CsBaseService {
@Override
public int getTotalCount(JDBCBean jdbcBean) {
return 1;
}
}
实现类二:
public class CsRelateModelService implements CsBaseService {
@Override
public int getTotalCount(JDBCBean jdbcBean) {
return 2;
}
}
调用的时候可以确定用的是哪个实现类:
public class RelateModelController extends BaseController{
//自动装配实现类二(这里就确定了调用的是实现类二 CsRelateModelService)
@Autowired
private CsRelateModelService relateModelService;
//初始化实现类2,关键在这步,指定relateModelService为beaseService
initParamProcess(relateModelService,new RelateModel(),new Page());
//然后直接调用实现类2的方法,输出为2
int totalCount = beaseService.getTotalCount(jdbcBean);
}
肯定有人抱怨:公司分下来开发任务,要求遵守接口类和实现类编写规范,在编码时发现为什么非得写一个接口,再写一个接口的实现类,要做的功能需求变多了以后,编码工作量也就多了,而不是直接调用某类里的方法,多写代码重复劳动,不如直接调用来的干脆,好像没什么区别的感觉。
打个比方:台式机的主机箱里面,有显卡插槽(接口类),显卡的更新换代是很快的,根据流行的游戏,对显卡的要求更高了,于是换显卡(实现类),直接拔掉旧显卡,插入新显卡就OK了。
为什么会抱怨再打个比方:抱怨多写代码重复劳动也不是没有道理的,比如平时不玩游戏,只是看看网页和电影(小项目),用的是笔记本电脑,内置显卡是焊死在主板上的(不写接口类和实现类也是可以的),显卡虽然不能更换,但也可是满足用户需要的。
所以总结:如果项目确实没有业务拓展的需要,可以不用写接口类和实现类那一套,不如直接调用来的干脆。
但一些大一点的项目都会考虑后期维护升级的拓展性和面向对象编程思想(为了装逼)而要求遵守接口类和实现类编写规范。