如果Java 一个接口有多个实现类,如何调用

Yanyan 592 2023-11-07


在 Java 中,如果一个接口有多个实现类,可以通过以下几种方式来调用不同的实现类:

1、根据具体实现类的类型进行调用:

2、利用接口的引用,根据条件判断调用不同的实现类:

3、在集合中存储不同的实现类对象,通过循环遍历调用:

4、使用工厂模式或依赖注入框架来动态获取不同的实现类对象:

需要根据具体的应用场景和需求选择适合的方式来调用不同的实现类。在代码中,根据接口类型、条件判断、集合遍历或动态获取实例等方式,可以灵活地调用不同的实现类的方法。

除了上述方案,还有以下一些方案可以实现在 Java 中调用多个实现类:

使用注解:通过为实现类添加特定的注解,在需要调用的地方通过注解扫描来获取实现类,并进行调用。

使用代理模式:通过动态代理机制,在运行时生成代理对象,并在代理对象中根据条件调用不同的实现类的方法。

使用配置文件:将不同实现类的信息配置在文件中,通过读取配置文件来获取实现类,并进行调用。

使用动态加载:使用 Java 的动态加载机制,根据类名或条件动态加载不同的实现类,并进行调用。


Java 一个接口有多个实现类主要的考核点是Java的三大特性之一——多态理论。

一说到多态,大家就会立即条件反射的想到:继承、封装。

是的,多态可以理解为继承和封装的大成者。

先简单的看下什么是继承和封装。

继承

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

封装

封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。

下面我们介绍下主角:多态

多态

多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作。这个刚好解决了面试官的那个问题。

好了,问题的答案找到了,但是要怎么实现呢?

一般的情况下,都是按照以下的套路去实现的。

实现之前,先把接口定义好。

接口代码:

public interface Animal {

  

   public void call();

     

   public void eat();

}

1.

2.

3.

4.

5.

6.

实现类小狗

@Service("dogService")

public class Dog implements Animal {

  

    @Override

    public void call() {

        System.out.println("dog call ");

    }


    @Override

    public void eat() {

        System.out.println("dog eat");

    }

}

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

实现类小猫

@Service("catService")

public class Cat implements Animal {

  

    @Override

    public void call() {

        System.out.println("cat call");

    }


    @Override

    public void eat() {

        System.out.println("cat eat");

    }

}

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

第一种实现方式:直接粗暴的使用new关键字。

使用new,那是very very的easy。

定义一个接口实现类,然后直接在调用的时候直接new实现类

例如要调用小猫的实现类:

直接一行代码搞定:

Animal cat = new Cat();

1.

第二种,使用注解。

用@Qualifier

通过这个标示,表明了哪个实现类才是我们所需要的,添加@Qualifier注解,需要注意的是@Qualifier的参数名称为我们之前定义@Service注解的名称之一。

@Autowired

@Qualifier("catService")

private Animal animal;

1.

2.

3.

@Resource注解

@Resource(name = "catService")

private Animal animal;

1.

2.

话转回来,为什么我们需要先看下封装和继承。

多态的cat和dog都用到了继承,animal使用的方法封装,在调用的时候,直接调用animal。

后续我们修改的话如果我们要修改cat和dog中的方法实现,不影响前端调用者的。



版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:天气预报接口调用: 如何获取实时天气信息并集成到应用程序中?
下一篇:提升业务效率的关键:内部接口调用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~