当前位置导航:炫浪网>>网络学院>>编程开发>>JAVA教程>>Java入门

Java编程那些事儿69——抽象类和接口(二)

    Java编程那些事儿系列文章(全集目录)

    8.9.2 接口

    接口(Interface)是一种复合数据类型。

    至此,Java语言的所有数据类型介绍完了,下面进行一个简单的总结。Java语言的数据类型分为两大类:基本数据类型和复合数据类型,其中基本数据类型有8种,复合数据类型包括数组、类和接口,由于开发过程中可以根据需要声明新的复合数据类型,所以复合数据类型的数量有无限个。

    接口的概念,现实中使用的也很多,例如大家经常使用的U盘,则需要和计算机上的USB接口匹配使用,而且USB设备中除了U盘以外还有很多,例如USB风扇、USB数据线、USB鼠标、USB键盘等,他们都使用计算机上统一的USB接口,这样设备的通用性很强。简化了计算机接口的设计,使计算机不需要具备鼠标接口、键盘接口等专用的结构。

    广义上来说,两个人说不同的方言,互相之间无法听懂另一方表达的意义,我们也可以称之为双方使用的接口不统一,CPU无法和主板匹配,我们也可以称之为接口不统一,例如AMD和Intel的CPU采用不同的针脚结构,甚至同一厂商不同型号的CPU针脚结构也不统一,这样很不方便设备之间的匹配,使用专业的技术术语叫作兼容性差。

    那么什么是接口呢?其实接口就是一套规范。

    例如USB接口,分为两套规范:公接口和母接口。例如U盘、USB鼠标上的USB接口为公接口,而电脑上的USB接口为母接口。规范中只规定公接口有4个通道,那些用来传输数据、那些用来进行供电,母接口规范只规定也有4个通道,那些用来传输数据,那些用来进行供电,电压是多少电流多大等。所有的这些规范都只规定了必须实现那些功能,但是却没有规定如何进行实现。

    这种只规定实现什么功能,而不限制如何进行实现的结构,在程序设计领域中称作“设计和实现相分离”,其中规定实现的功能属于设计部分,而如何实现功能则是实现部分。这样进行程序项目制作,可以让一部分人专门进行项目设计,而由另一部分人进行项目实现。这点,很类似汽车的制造,由设计人员设计汽车,由制造人员进行制造。

    这种“设计和实现相分离”的结构将极大的简化程序项目的设计和管理,使得整个项目的分工更加细致,也就是使程序设计完全独立出来,而在设计完成以后再进行代码编写。

    接口就是一个纯粹用来设计的数据类型,在接口这种数据类型中,只能书写两类声明的结构:

    l  常量数据

    所有的常量数据都是public static的。如果声明时不书写则系统将自动添加这两个修饰符。

    l  抽象方法

    接口中的所有方法都只在逻辑上规定该方法的作用,而不能书写方法体。所有接口中的方法都是public abstract的,如果声明时不书写则系统将自动添加这两个修饰符。

    其中接口中的数据是常数,以后不能改变,而方法只是规定要做什么,而不去规定如何进行实现。这样接口就很方便设计人员进行设计,而不必过多的关系对应的方法如何在逻辑上进行实现。

    接口声明的语法格式如下:

    访问控制符 interface 接口名 [extends 父接口名1,父接口名2……]{

    常量声明

    方法声明

    }

    和类的声明一样,访问控制符只能使用public和默认的。声明时使用interface关键字声明接口,接口可以继承其它的接口,使用extends关键字进行继承,多个接口名之间使用逗号进行分隔。和类的集成一样,子接口继承父接口中所有的常量数据和方法,子接口的对象也是父接口的对象。

    注意:和抽象类一样,接口只能声明对象,而不能创建对象。

    接口声明的示例代码如下,例如声明一个USB接口来代表实际使用中的USB结构:

                   public interface USB{

                            /** 电压 */

                            public static final int V = 5;

                            /** 读取数据 */

                            public abstract byte[] readData();

                            /** 写入数据 */

                            public abstract void writeData(byte[] data);

                   }

    该接口中规定电压常量为5V,声明了两个方法,要求实现USB时必须实现这样两个方法,至于如何实现这里不做规定。这样这个数据类型就只是设计上的说明,而不牵扯具体的实现,这样在项目中使用时则比较通用。

    从这点来看,接口类似于现实中使用的各个国家标准,标准中只规定该类型最终需要达到的标准,而不规定如何实现,各个厂商可以根据自己的产品工艺实现该要求即可。

    在实际的项目中,设计接口需要对于项目的整体有比较深刻的了解和认识,这样才可以设计出需要的接口结构,关于接口的设计这里不作太深入的论述。如果需要更深刻的了解设计的结构,可以参阅OReilly的《Designing.Interfaces》一书。

    接口设计完成以后,还需要再项目中实现接口规范中对应的要求,一般声明对应的类来实现接口,实现接口的语法为:

    访问控制符 [修饰符] class 类名 [extends 父类名] implements 父接口名1,父接口名2……

    实现接口的语法位于类声明中,位于继承声明的后面,使用implements关键字代表实现,后续是需要实现的接口的名称,一个类可以实现任意多个接口。

    实现接口和继承类很类似,声明的类称作接口的子类,接口为该类的父接口,子类中继承父接口中所有的数据和方法,因为接口中所有的方法都是抽象方法,所以如果子类中不实现(覆盖)父接口中的方法,则该类必须声明为抽象类。

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接