一、简单例子:

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;


}

一、简单例子:1. 直接new一个实例,这样肯定知道用的哪个实例2. 定义接口类型的变量,用某个实例去初始化。。。这样也是肯定知道用的哪个实例一般我们用第二种方式有一个好处,如果以后要改动,那么只需要修改其引用的实例,改动较少!举个例子:A接口,A1,A2,A3实现A接口,有一个eat方法,A1:吃饭,A2:吃鱼,A3:吃肉需要得到"吃肉",那么 A a = n
看前同事的代码 ,两个不同的线程走的是同一个 方法 实现 ,但是两个线程除了查询的数据库表不一致,其他逻辑完全一致。所以用到了一个 接口 多个 实现 类,每个 实现 类查询不同数据库。记录一下 接口 是怎么 调用 不同的 实现 类的。 定 任务一: 定 任务二: 同 继承了一个 实现 类AbstractSendDataTask
1.JAVA里没有多继承,一个类之能有一个父类。   而继承的表现就是多态。一个父类可以有多个子类,而在子类里可以重写父类的 方法 (例如 方法 print()),这样每个子类里重写的代码不一样,自然表现形式就不一样。这样用父类的变量去引用不同的子类,在 调用 这个相同的 方法 print()的 候得到的结果和表现形式就不一样了,这就是多态,相同的消息(也就是 调用 相同的 方法 )会有不同的结果。举例说明:   public class Father{   //父类有一个打孩子 方法 public void hitChild(){}   //子类1   public clas
最近在做某“马店”项目 的报表,定 任务(更新报表数据) 实现 使用 @Autowired 注入每张报表的逻辑类。随着报表的增多,@Autowired 越来越多。记录一次使用 ApplicationContextAware 优化的过程。 学习总结: 链接:【Java基础、springboot、springcloud、docker 等,学习目录】 前期代码: @Slf4j @Component public class ScheduleBox { @Autowired privat
一个 接口 多个 实现 类,如何指定特定 实现 类进行 调用 示例解决 方法 在写程序的 候经常会遇到 写一个 接口 有多个 实现 类,那么在 调用 候是如何去确定 调用 的是哪个 实现 类呢?接下来将为你介绍几种方式: public interface Animal { //动物的叫声 public void call(); //动物吃的东西 public void eat(); 实现 类1 @Service("dogImpl") public class Dog implements An
背景:学习security的 候查看源码,有个地方采用了 接口 . 方法 的方式,通过ctrl+alt+b快捷键发现 接口 有多个 实现 类 这种情况恰可以使用debug,来查看具体 调用 的是哪个 实现 类的 方法 ,操作如下: 1.打断点 2.以debug模式运行项目 3.在断点处,复制想要查看的代码,并在debugger控制台打印出来(回车键) 4.查看其真实类型 到此我知道了,其真实类型是Provider...
1、 直接new一个实例,这样肯定知道用的哪个实例 2、 定义 接口 类型的变量,用某个实例去初始化。。。这样也是肯定知道用的哪个实例 3、用反射创建 实现 类或者 实现 类的子类对象,强转成 接口 类型 ICar iCar = (ICar) ServiceAnnotationSupport.serviceInjection(Class.forName("com.test.AodiCarPlus")); iCar.run();
今天上厕所的 候刷到别人说到面向 接口 编程和面向业务编程,然后就想到了 接口 的特性,随后想到一个 接口 可以有多个 实现 类,有多个 实现 类的话,控制层是怎么 调用 实现 类的呢?因为以前没遇到过这个问题,自己的实际开发 一个 接口 只有一个 实现 类,然后就想到万一一个 接口 有两个以上的 实现 类的话,控制层自动注入的 实现 类到底是哪一个的问题。 (然后还想到,自己写的每一个项目,都是一个 接口 一个 实现 类,根本没有利用到 接口 设计的优点,当然这不是本题所讨论的重点,但是可以做个小标记供以后进阶学习。) 下面开始介绍我网上搜集到的三种方式。
1.JAVA里没有多继承,一个类之能有一个父类。   而继承的表现就是多态。一个父类可以有多个子类,而在子类里可以重写父类的 方法 (例如 方法 print()),这样每个子类里重写的代码不一样,自然表现形式就不一样。这样用父类的变量去引用不同的子类,在 调用 这个相同的 方法 print()的 候得到的结果和表现形式就不一样了,这就是多态,相同的消息(也就是 调用 相同的 方法 )会有不同的结果。举例说明:   public class Father{   //父类有一个打孩子 方法 public void hitChild(){}   //子类1   public clas
对于一个声明了多个 方法 接口 ,我们使用的 候有 仅仅关注于几个关键 方法 ,并不需要 实现 所有的。可是由于 接口 调用 的语法限制,使得我们不得不在代码 也显示声明 实现 了那些我们不关心的 方法 。在Java 也有简化 接口 调用 的方式,比如安卓 ViewPager监听页面切换 接口 PageChangeListener,官方提供了简单类: ViewPager.SimpleOnPageChangeListener来简化 调用 。 对于Kotlin来说,可以类似使用java的方式,来 实现 多函数 接口 的简化 调用 ,只是要用到object关键字且代码仍会较多。这里,由于Kotlin的语法更为灵活,去 实现 这种 调用 应该有其特色的方式
集合有Collection与Map两种 接口 ,其 Collection有两种子 接口 (list、set) 一、Collection 接口 的两个子 接口 (list、set): 1) List 的元素有序,不唯一。常用的 实现 类有ArrayList、LinkedList和 vector。 ·ArrayList: 底层数据结构是(Object)数组; ArrayList的Object数组初始...
public void convert(UpFile upFile) throws Exception; public boolean support(UpFile upFile); 实现 类一 @Service public class PictureServiceIm