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经典面试题:一个接口多个实现类,如何指定实现类的主要内容,如果未能解决你的问题,请参考以下文章