一个接口有多个实现类,当调用接口中的方法时,如何判定用的是哪个实现类

一、简单例子:

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;


}

}

  • 15
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值