一個介面有多個實現類,當呼叫介面中的方法時,如何判定用的是哪個實現類
一、簡單例子:
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類
}
RelateModelController 的父類BaseController
public abstract class BaseController {
void initParamProcess(CsBaseService beaseService, JDBCBean jdbcBean,
Page page) {
this.beaseService = beaseService; //指定哪個實現類為beaseService
this.jdbcBean = jdbcBean;
this.page = page;
}
}