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

 我来答
huanglenzhi
2018-01-23 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517195
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
一、简单例子:
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;

}
}
广东轻亿云软件
2024-05-14 广告
广东轻亿云软件科技有限公司在软件开发领域深耕多年,积累了丰富的经验和技术实力。我们深知API接口在现代软件开发中的重要性,因此,我们与多家业界领先的API接口提供商保持着紧密的合作关系,确保我们的产品和服务能够充分利用这些接口,为用户提供更... 点击进入详情页
本回答由广东轻亿云软件提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式