黑马程序员_接口

来源:互联网 发布:java 泛型 原理 编辑:程序博客网 时间:2024/04/19 12:56
----------- android培训java培训、java学习型技术博客、期待与您交流! ------------
接口

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

接口就是一套规范。

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

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时必须实现这样两

个方法,至于如何实现这里不做规定。这样这个数据类型就只是设计上的说明,而不牵扯具

体的实现,这样在项目中使用时则比较通用。

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

在实际的项目中,设计接口需要对于项目的整体有比较深刻的了解和认识,这样才可以设计出需要的接口结构。

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

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

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

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

例如计算机实现了 USB 接口,则示例代码如下:

public class Computer implements USB{

/**内存容量*/

int memorySize;

public abstract byte[] readData(){

//读数据的逻辑

}

public abstract void writeData(byte[] data){

//写数据的逻辑

}

}

这里,Computer 类实现了前面的 USB接口,在 Computer 类内部可以书写和Computer 类相关的属性、方法和构造方法,这里对于实现接口没有影响,而因为实现了 USB

接口,则必须覆盖 USB 接口中的 readData writeData 抽象方法,至于方法内部的代码,则根据逻辑的需要进行实现,从而实现接口中要求实现的功能。

类似的,也可以使一个数码相机实现 USB 接口,则实现的示例代码为:

public class DigitalCamera implements USB{

/**厂商名称*/

String vendorName;

public abstract byte[] readData(){

//读数据的逻辑

}

public abstract void writeData(byte[] data){

//写数据的逻辑

}

}

在该类中,也可以根据该类的需要实现 USB 接口中规定的功能,至于如何实现则

很可能和Computer 类不同。

这样,虽然 Computer 类和 DigitalCamera类自身原来的功能不同,但是都可以通过实现 USB接口而实现同样的功能,这样单纯的从是否支持 USB功能来看,这两个类的实

现是一样的。按照面向对象的术语来说,这被称作屏蔽了类的类型之间的不同,保证了程序

的通用性。

由于实现接口时,不限制实现的接口的数量,则任何一个类都可以实现任意多个接口,这样就使类的通用性获得了极大的增强,很方便类的对象之间的匹配。就像现实中USB接口规范方便了多种不同设备之间的互联一样。

在语法上,实现了接口的对象可以使用子类的构造方法进行创建,这样又很适合多态的结构,可以说接口的出现,使多态的特性更容易的进行实现。

在实际项目中,通过使用一定的接口,使得很多类的对象在实现某种类型的功能时,方法的声明是统一的,便于程序的调用和管理,利于程序项目的扩展。

-----------android培训java培训、java学习型技术博客、期待与您交流! ------------