现在的位置: 首页 > 综合 > 正文

深入理解Java接口(一)

2018年04月06日 ⁄ 综合 ⁄ 共 1859字 ⁄ 字号 评论关闭

一、Java接口的基本内容

[1].Java编程语言中不支持多重继承(Java中一个类不能有多于一个的直接父类),但可以实现多个接口,这就间接地实现了多重继承。

[2].接口(Interface)将产生一个完全抽象的类,它是用来建立类与类之间的协议的,其内部只提供调用方法的形式(创建者确定方法名、参数列表及返回类型),而没有提供任何具体的方法体。具体的实现方法(该接口中的所有方法)需要在遵循该特定接口的类中进行实现。创建接口需要使用关键字interface,而创建一个遵循某接口的类则需要使用关键字implements

 

二、Java接口的基本特征

    [1].接口可以包含域,但是这些域不是接口的一部分,它们的值被存储在该接口的静态存储区内;域隐式为publicstaticfinal(域名通常大写且单词之间以下划线连接),域不能是“空final”,在使用之前必须显式地初始化,但可以被非常量表达式初始化。

    [2].当实现一个接口时,接口中的方法必须是public的,通常隐式地为publicabstract的。

    [3].接口必须通过类来实现它的抽象方法,且该类必须实现该接口中的所有方法,否则该类仍是一个抽象类。

    [4].接口因为没有构造器而不能进行实例化,但运行定义接口类型的引用变量,该引用变量实现了该接口的类的实例。比如:

    Interface Base{/*…*/}

    Public class Derived implements Base{/*…*/}

    //! Base b=new Base();error:接口不能进行实例化

    Base b=new Derived();//引用变量b被定义为类型Base,引用了Derived实例

    [5].一个类只能继承一个父类,但可以实现多个接口,并可以向上转型为每个接口(因为每个接口都是一个独立的类型)按照先类后接口(多个接口以逗号分开)的顺序进行实现。例如:

Class BaseClass{}

    Interface BaseIntfaceA{}

    Interface BaseIntfaceB{}

    Public class Derived extends BaseClass

implements BaseIntfaceA, BaseIntfaceB{}

    [6].接口可以嵌套,嵌套在接口中的接口自动为public而不能修改为private。当实现某个接口时,不需要实现嵌套在其内部的任何接口。类中的private接口不能在定义它的类之外被实现。

    [7].接口可以很好地应用于松耦合软件系统构建之中。通过接口可以很方便地对已经存在的系统进行自下而上的抽象,对于任意的两个类,只要他们存在有相同的功能,就能从中抽象出一个接口类型,而不用理会它们是否源自同一个父类。对于两个系统,通过接口交互可以获得比抽象类交互更好的松耦合特性。

 

三、接口与抽象类的异同点

    [1].相同点:

<1>.二者都包含有描述系统能提供服务的抽象方法,都不提具体实现的方法体,都不能被实例化。

<2>.都位于继承树的上层,都代表系统的抽象层。当系统使用继承树上的类时,应尽量把引用变量声明为继承树的上层抽象类型,这样可以提高两个系统的松耦合程度。

    [2].不同点:

<1>.抽象类中可以定义调用方法的方法体以免在子类中的重复定义,对子类中修改方法体不会造成影响;对于接口,一旦接口公布就必须保持稳定,因为随意向接口中添加方法会直接影响到子类的功能,此时子类要么实现新增的方法,要么就声明为抽象类,而声明为抽象类就意味着该类不能进行实例化,也就限制了该类的应用了。

<2>.一个类只能有一个直接父类(此父类可以是抽象类),但它可以实现多个接口。当子类覆盖父类的调用方法或隐藏父类的成员变量及静态方法时,Java虚拟机采用不同的绑定机制,为了简化系统设计的复杂性和绑定机制,Java禁止多重继承;对于接口,其内部只含有抽象方法而没有实例变量及静态方法,即便一个类实现多个接口也不会增加绑定机制的复杂性。

 

四、接口和抽象类的使用原则

    [1].使用接口作为系统与外界交互的窗口。

    [2].接口必须保持稳定性。

    [3].使用抽象类来定制系统中扩展点。

 

Reference:

       Bruce Eckel. <<Thinking in Java>>4-th Edition

http://baidu/zhidao HiЁnd. Java接口

张广彬. Java课程设计案例精编. 清华大学出版社

抱歉!评论已关闭.