为什么要使用接口?

http://blog.csdn.net/mercury137/article/details/4493179

        所谓接口,是一些方法特征的集合,这些方法来具体的方法,但是他们一般来自于在系统中不断出现的方法。在Java语言规范(Java Language Specification)[JLS00]中,一个方法的特征仅包括方法的名字、参量的数目和种类,而不包括方法的返还类型,参量的名字以及所抛出的异常。

        接口本身没有任何实现,因为Java不涉及表象,而之描述public行为,所以Java接口比Java抽象类更为抽象化。Java的接口可以有public,静态的和final的属性。

        考虑一下,如果没有接口会怎么样?

        一个对象需要知道其他的行为的一些对象,并且与其他的对象发生相互作用,这是因为这些对象需要借助于其他对象的行为以便完成一项工作。这些关于其他对象的知识,以及其他对象的行为的调用,都是使用Hardcode写在类里面的,可插入性几乎为零。如果要加入新的类,仅仅意味着加入新的硬编码,而不能给出动态的可插入性。

      那我们能不能使用一下类的继承,比如现在有一个具体类,提供某种使用硬代码写在类中的行为。现在,要提供一些类似的行为,并且实现动态的可插入,也就是说,要能够动态的决定使用哪一个实现。一个可能的做法就是为这个类提供一个抽象的超类,声明出子类要提供的行为,然后让这个具体类继承自这个抽象超类。同时,为这个抽象超类提供另一个具体子类,这个子类以不同的方法实现了超类所声明的行为。客户端可以动态的决定使用哪一个具体的子类。这样确实可以再简单的情况下提供可插入性。但是由于Java是一个单继承的语言,一个类只能有一个超类,因此在许多情况下,这个具体类可能已经有一个超类,这时。再加一个超类是不可能的。如果硬要这样的话,可以把这个新的超类加到已有的超类上面,形成超超类的情况;如果这个超超类的位置已经被占用了,就只好继续向上移动,直到移动到等级结构的最顶端,这样以来,问题就严重了!对一个具体类的可插入行设计,就变成了对整个等级结构中所有的类的修改。

        因此,没有接口,可插入性就没有保证。

原文地址:https://www.cnblogs.com/daishuguang/p/2593903.html