Java经典面试题:一个接口多个实现类,如何指定实现类

Posted 沛沛老爹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java经典面试题:一个接口多个实现类,如何指定实现类相关的知识,希望对你有一定的参考价值。

 这个面试题比较经典。

主要考核的点是Java的三大特性之一——多态的理论掌握程度。

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

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

先简单的看下什么是继承和封装。(小伙子,听我的,这个东西很重要滴)

继承

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

封装

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

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

多态

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

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

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

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

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

接口代码:

public interface Animal {
  
   public void call();
     
   public void eat();
}

实现类小狗

@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");
    }
} 

实现类小猫

@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");
    }
}
 

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

使用new,那是very very的easy。

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

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

直接一行代码搞定:

Animal cat = new Cat();

第二种,使用注解。

用@Qualifier

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

@Autowired
@Qualifier("catService")
private Animal animal;

@Resource注解

@Resource(name = "catService")
private Animal animal; 

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

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

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

后面我们留个问题,如果你的系统需要记录每个人在后台操作了什么?

这个你一般怎么实现的?

以上是关于Java经典面试题:一个接口多个实现类,如何指定实现类的主要内容,如果未能解决你的问题,请参考以下文章

最全多线程经典面试题和答案

最全多线程经典面试题和答案

Java经典面试题+答案(全)

Java集合框架梳理(含经典面试题)

经典Java面试100例,轻松搞定BAT——高频面试题(下)

JAVA面试题整理