在家里,我们可以很容易地将微波炉从一个电源插座上拔下,然后将手提电脑插上去。这就是说,对电
源来说,这些电器都是可插入构建(Pluggale Component)。他们之所以是卡插入的(Pluggable),
因为他们都具与电源插座相匹配的插头。
如果可以动态地讲一个构件一走,并以另一个构件取而代之,那么这种构件就是可插入构件。
大家可以看出,所谓的接口,实际上就相当于电源的插座;而可插入构件就相当于这种插座匹配的电器。
正如电器的插入行是由同一的电源插座以及每个电器都有一个与之匹配的电源插头所一样,可插入构件的关
键 在于存在一个公用的接口,以及每个构件都实现了这个接口。
因此,接口是实现构件的可插入性(Pluggability)的关键。
5.1 什么是接口
一个java接口(Interface)是一些方法特征的集合。一个接口只有方法的特征,而没有方法的实现,因此这些方法在不同的地方
被实现时,可以具有完全不同的行为。在Java语言中,Java接口还可以定义public 常量。
当人们说到“接口”的时候,往往有这两种不同的含义:第一种是指Java接口,这是一种Java语言中存在的语法结构。另
一种仅仅是这一个类所具有的方法。前者叫做“Java接口”,或者叫做“接口”。
比如,java.lang.Runnable就是一个Java 接口(Interface)代码示例如下:
Public interface Runnable{ //即上面所说的方法特征,所有实现该接口的类,都具必须实现run()方法。 //在这里,仅有方法声明,没有实现。 public abstract void run(); }
在使用Java接口时,需要指明接口本身,以及实现这个接口的类。一个类实现一个接口,
这种关系叫做接口继承(Interface Inheritance):而一个类是另一个类的子类,这种关系叫做实现继承
(Implementation Inheritance)。接口继承的规则与实现继承的规则不同,一个类只能继承一个类,
但是却可以实现多个接口。
Java接口本身没有任何方法的实现,因为Java接口不涉及表象,而只描述public行为,所以java接口比java
抽象类更为抽象化(因为,java抽象类中可以有具体的方法,而接口中只有方法声明)
一个Java接口的方法只能是抽象的(abstract)和公开的(public),Java接口不能有构造子。Java接口可以有
Public,静态的和final的属性(见下面代码示例)。
实现同一个Java接口的两个实现类,除了具有同样的方法以外。其行为可以完全的不同。接口和类的最重要的区别是,
java接口仅仅描述方法的特征(signature),而不给出方法的任何实现;而类不仅要给出方法的特征,而且还必须给出
方法的实现。
没有接口会怎么样
简单的说,在java语言中是单继承的。而接口是可以多重实现的,
如果说没有接口话,再给一个已经有超类的类加上一个新的超类是不肯能的。
如果硬要做的话,就只好把这个心的超类加到已有的超类上面,形成超类的超类;
如果这个超类的超类的位置已经被占用,就必须加到超超超类上,等等,那么整个
类继承的关系将会非常非常的庞大。这样一来,对一个具体的可插入性设计,就变
成了对整个登记结构的所有类的修改。
因此,没有接口,可插入性就没有任何保证。
接口是对可插入性的保证
接口使可插入行变得可能。
在一个类等级结构中的任何一个类都可以实现一个或者多个接口,这些接口会影响到
此类的所有子类,但是不会影响到此类的任何超类。此类将必须实现这些接口所规定的
方法,而其子类则可以从此类自动继承到这些方法,同时,如果需要也可以置换掉这些
方法,或者其中的一些。
这时侯,这些子类就具有了可插入性。
类型
用Java接口(以及java抽象类)用来声明一个新的类型。