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;


}

}