一.接口含义:设计模式
1.Java接口,Java语言中存在的结构,有特定的语法和结构;2.一个类所具备的方法的特征集合,是一种逻辑上的抽象。工具
前者叫作“Java接口”,后者叫作“接口”。设计
Java接口自己没有任何实现,由于Java接口不涉及表象,而只描述public行为,因此Java接口比Java抽象类更抽象化。orm
Java接口的方法只能是抽象的和公开的,Java接口不能有构造器,Java接口能够有public,静态的和final属性。对象
二.为什么用接口Java是一种单继承的语言,若要给已有父类的具体类增长新功能,在OCP原则下,解决是给它的父类加父类,或者给它父类的父类加父类,直到移动到类等级结构的最顶端。这样一来,对一个具体类的可插入性的设计,就变成了对整个等级结构中全部类的修改。继承
当有了接口,以上例子中,就不须要维护整个等级结构中的全部类了.接口
三.接口具胡可插入性:生命周期
在一个等级结构中的任何一个类均可以实现一个接口,这个接口会影响到此类的全部子类,但不会影响到此类的任何超类。此类将不得不实现这个接口所规定的方法,而其子类能够今后类自动继承这些方法,固然也能够选择置换掉全部的这些方法,或者其中的某一些方法,这时候,这些子类具备了可插入性(而且能够用这个接口类型装载,传递实现了他的全部子类)。io
接口提供了关联以及方法调用上的可插入性,软件系统的规模越大,生命周期越长,接口使得软件系统的灵活性和可扩展性,可插入性方面获得保证。编译
正是有了接口,使得Java单继承性有了新的扩展的可能(变向地实现多继承);三.类型等级结构Java接口(以及抽象类)通常用来做为一个类型的等级结构的起点。
若是一个类已经有了一个主要的超类型,那么经过实现一个接口,这个类能够拥有另外一个次要的超类型,这种次要的超类型叫作混合类型。
四.Java接口分类一、普通接口(含有方法定义)public interface ActionListener{public abstract void actionPerformed(ActionEvent event);}
二、标识接口(无任何方法和属性定义)标识接口是没有任何方法和属性的接口.标识接口不对实现它的类有任何语义上的要求,它仅仅代表实现它的类属于一个特定的类型。
public interface Serializable{};三、常量接口是指用Java接口来声明一些常量,而后由实现这个接口的类使用这些常量。
public interface AppConstants{public static final DATA_SOURCE_NAME="test";public static final USER_NAME="test";public static final PASSWORD="test";}
五.接口的特色一、Java接口中的成员变量默认都是public,static,final类型的(均可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用"_"分隔)二、Java接口中的方法默认都是public,abstract类型的(均可省略),没有方法体,不能被实例化三、Java接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法四、接口中没有构造方法,不能被实例化五、一个接口不能实现(implements)另外一个接口,但它能够继承多个其它的接口六、Java接口必须经过类来实现它的抽象方法七、当类实现了某个Java接口时,它必须实现接口中的全部抽象方法,不然这个类必须声明为抽象类八、不容许建立接口的实例(实例化),但容许定义接口类型的引用变量,该引用变量引用实现了这个接口的类的实例九、一个类只能继承一个直接的父类,但能够实现多个接口,间接的实现了多继承.
六.Java接口和Java抽象类区别面向对象设计的重点在于抽象。抽象类与接口都位于继承树的上层。
相同点:
一、表明系统的抽象层,当一个系统使用一颗继承树上的类时,应该尽可能把引用变量声明为继承树的上层抽象类型,这样能够提升两个系统之间的送耦合二、都不能被实例化三、都包含抽象方法,这些抽象方法用于描述系统能提供哪些服务,但不包含方法体不一样点:
一、最大的一个区别,就在于Java抽象类能够提供某些方法的部分实现,而Java接口不能够;这大概就是Java抽象类惟一的优势吧,但这个优势很是有用。
能够向抽象类里加入一个新的具体方法,全部的子类都自动获得这个方法;但Java接口里加入一个 新方法,全部实现这个接口的类就没法成功经过编译,必需手动给每一个实现了该接口的类加上该方法的实现;二、抽象类的实现只能由子类给出,也即该实现只能在抽象类定义的继承的等级结构中;因此抽象类做为类型定义工具的效能大打折扣。
Java接口,任何一个实现了一个Java接口所规定的方法的类均可以具备这个接口的类型,而一个类能够实现任意多个Java接口,从而这个类就有了多种类型。
以上看出:Java接口是定义混合类型的理想工具,混合类代表一个类不只仅具备某个主类型的行为,并且具备其余的次要行为。
三、结合一、2点中抽象类和Java接口的各自优点,具精典的设计模式就出来了:
声明类型的工做仍然由Java接口承担,可是同时给出一个Java 抽象类,且实现了这个接口,而其余同属于这个抽象类型的具体类能够选择实现这个Java接口,也能够选择继承这个抽象类,也就是说在层次结构中,Java 接口在最上面,而后紧跟着抽象类,这下两个的最大优势都能发挥到极至了。这个模式就是“缺省适配模式”。
在Java语言API中用了这种模式,并且全都遵循必定的命名规范:Abstract +接口名。
七.使用接口和抽象类的整体原则:
一、用接口做为系统与外界交互的窗口站在外界使用者(另外一个系统)的角度,接口向使用者承诺系统能提供哪些服务,站在系统自己的角度,接口制定系统必须实现哪些服务,接口是系统中最高层次的抽象类型.经过接口交互能够提升两个系统之间的送耦合系统A经过系统B进行交互,是指系统A访问系统B时,把引用变量声明为系统B中的接口类型,该引用变量引用系统B中接口的实现类的实例。
public interface B { }
public class C implements B { }
public class A { B a = new C(); }
二、Java接口自己必须很是稳定,Java接口一旦制定,就不容许随遇更加,不然对外面使用者及系统自己形成影响三、用抽象类来定制系统中的扩展点,抽象类来完成部分实现,还要一些功能经过它的子类来实现