一个接口有多个实现类,当调用接口中的方法

2025-04-28 03:24:40
推荐回答(1个)
回答1:

一、简单例子:
1. 直接new一个实例,这样肯定知道用的哪个实例
2. 定义接口类型的变量,用某个实例去初始化。。。这样也是肯定知道用的哪个实例

一般我们用第二种方式有一个好处,如果以后要改动,那么只需要修改其引用的实例,改动较少!

举个例子:A接口,A1,A2,A3实现A接口,有一个eat方法,A1:吃饭,A2:吃鱼,A3:吃肉

需要得到"吃肉",那么 A a = new A3();
需要得到"吃饭",那么 A a = new A1();

二、看代码发现的例子:
接口:
public interface CsBaseService {
//获得总记录条数
public int getTotalCount(JDBCBean jdbcBean);
}

实现类1:

@Service
public class CsLastUpdateService implements CsBaseService {

@Override
public int getTotalCount(JDBCBean jdbcBean) {
return 0;
}

}

实现类2:
public class CsRelateModelService implements CsBaseService {
@Override
public int getTotalCount(JDBCBean jdbcBean) {
return 2;
}

}
调用的时候:
public class RelateModelController extends BaseController{

@Autowired
private CsRelateModelService relateModelService;//自动装配实现类2

initParamProcess(relateModelService,new RelateModel(),new Page());//初始化实现类2,关键在这步,指定relateModelService为beaseService,具体见BaseController类

int totalCount = beaseService.getTotalCount(jdbcBean);//然后直接调用实现类2的方法,输出为2
}

RelateModelController 的父类BaseController

public abstract class BaseController {
void initParamProcess(CsBaseService beaseService, JDBCBean jdbcBean,
Page page) {
this.beaseService = beaseService; //指定哪个实现类为beaseService
this.jdbcBean = jdbcBean;
this.page = page;

}
}