很有必要的。

首先你要先明白这样做的目的:是为了简化代码,封装逻辑的。如果没有达到这个目的,那么我们做在这样的实现也是毫无作用的

那么接口的作用究竟是什么?用大白话说:接口其实就是我们程序员所定义的一种协议。例如10个开发者,开发的时间完全不一致,那么需要这些个人的配合开发,则需要一个人讲接口写好,定义好其中所有的变量命名规范、函数定义规范。具体实现类的开发人员则只需要按照接口实现相应功能即可。

比如定义一个动物奔跑的行为,计算时速: interface CalculateRunRate{}

对象是各种动物,dog,cat,pig ,duck

那么,由于不同动物的本培行为都需要有自己的方法,可以通过实现这个接口进行接下来的操作

为什么不在一个类是直接实现相应的方法,而是需要先进行接口抽象?

①首先是关于全局变量的定义,目的已经很清楚了。

②其次是说明一下接口的真正作用是建立在很多的对象类、并且类同时拥有很多的方法(需要实现的功能)。这种情景下,使用接口可以非常明显的感觉到接口的作用。

下面举例:

例如:海 、陆、 空 三种生活的动物类型,三种分别可以实现的功能是:

海:游泳、捕猎水生动物、长时间憋气

陆:走、跑、跳、爬、捕食、交流

空:飞、捕食空中动物、鸣叫、

划重点:以上就应该是我们需要定义的接口。高度抽象化的没有具体实现的方法。

现在有这些确定的需要实例化的对象类

人类(海、陆)

鱼(海)

鳄鱼(海、陆)

鸟(陆、空)

放出一个实例化 人类 对象源码,具体实现省略:

package interfacedemo;
public class Human implements Ocean,Land{
public Human() {
}
@Override
public void run() {
}
@Override
public void jump() {
}
@Override
public void walk() {
}
@Override
public void landCatch() {
}
@Override
public void communicate() {
}
@Override
public void swim() {
}
@Override
public void oceanCatch() {
}
@Override
public void breath() {
}
}

那么现在如果实例化对象的时候,不使用接口的方法。如果开发者很明确需求的情况下,问题不大。但是需求是其他人负责的话,那么可以你无法实现所有要求的方法。第二,如果不使用接口的方法,对于这几个类之间的关系是不清楚的。(可以自己举其他例子,而不去抽象出接口尝试一下)。

4、最后讲一下使用接口的好处:

①全局变量定义

②如同上面的例子,我们去实现接口后,能够很明显清楚各个类具体实现类之间的关系,如果将自己的代码交给别人看的时候,他只需要看你所定义的接口就知道了你的类具体是干嘛的。换言之,你看别人的代码,如果别人的代码也是这样定义的,那么是不是改别人代码、看懂别人代码也容易很多了。所以,在之前笔者就说过:接口更像是一种定义的规范。