接口的概念在现实生活中使用的很多。例如,计算机上提供的USB接口,专门供USB设备使用,如U盘、USB风扇、USB鼠标、USB键盘等。计算机通过统一的USB接口来提高通用性,使计算机不再需要同时具备U盘专用接口、鼠标专用接口、键盘专用接口等。再如,计算机的主板上提供的PCI插槽,也提供统一的设计规范,使得遵守这个规范的声卡、显卡、网卡都可以插在PCI插槽上,如下图所示:

图 12-6 PCI插槽提供的接口
上图中网卡、声卡、显卡内部结构都不相同,但可以把网卡、声卡、显卡都插在PCI插槽上,而不用担心哪个插槽是专门插那个卡的。
从上面两个例子可以看出,接口是一套标准规范,满足标准规范的外部设备都可以通过接口接入到系统。计算机设计师在设计USB接口时,规范USB的接入装置、供电电压、传输速率等。这些规范仅是规定了必须满足的功能和要求,但是却没有规定如何进行实现。
接口的具体实现由这个接口的具体类来实现。例如,使用计算机的USB接口的是那些实现USB接口规范的产品,如U盘、USB鼠标等,这些具体产品会实现USB接口规范。
Java接口定义与实现
在Java中,使用interface关键字来定义接口。接口中的方法都只有声明,没有方法主体。例如:
//定义了一个PCI接口
public interface PCI {
//定义了一个开始方法
public void start();
//定义了一个结束的方法
public void stop();
}Java接口中定义的方法都只有方法声明,没有具体的主体,也可以理解为接口中只能有抽象方法,具体的接口实现由子类完成,这样就可以让不同的子类遵守相同的规范,但又有自己的实现。
下面分别定义声卡和显卡,来实现接口PCI规定的功能。实现代码如下:
//声卡实现类
class SoundCard implements PCI
{
@Override
public void start() {
// TODO Auto-generated method stub
System.out.println("Du du...");
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("Sound Stop!");
}
}
//网卡实现类
class NetworkCard implements PCI
{
@Override
public void start() {
// TODO Auto-generated method stub
System.out.println("Send...");
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("Network stop!");
}
}SoundCard类和NetworkCard类通过implements关键字来声明实现PCI接口,并分别实现了接口的start方法和stop方法。
Java接口中的常量
接口中还可以定义变量,只不过这些变量默认是用public static final修饰的,变量值也不能更改,这种变量也可以称为常量。
例如,定义MathConstant接口,接口中定义圆周率常量,代码如下:
public interface MathConstant {
//定义数学上的圆周率
double PI = 3.1415926;
}Java多重接口
在Java语言中,一个类是可以实现多个接口的,这个类必须实现接口中声明的所有方法。
下面给出了汽车类实现运行接口和车身颜色接口例子,代码如下:
//定义了运行接口
public interface Runner {
public void run();
}
//定义了车身颜色接口
public interface Constants {
public static final int COLOR_RED = 1;
public static final int COLOR_GREEN = 2;
public static final int COLOR_BLUE = 3;
}
//实现两个接口,用逗号分割多个接口
class Car implements Runner,Constants
{
public void run()
{
System.out.println("车颜色是:" + COLOR_RED);
System.out.println("正在运行");
}
}接口无法被实例化,仅可以被类实现。具体类通过定义由接口声明的所有方法,来实现接口。多个类可以实现同一个接口,这些类不需要有共同的类层次。重要的是,一个类可以实现多个接口。
■ 知识点拨
在实际编程中,通过使用一定的接口,使得很多类的对象在实现某种类型的功能时,方法的声明是统一的,这样便于程序的调用和管理,利于程序项目的扩展。因此在面向对象的编程领域中,存在着另外一个方向——面向接口的编程,很多Java技术都是这样实现的。
■ 思考与练习
应用eclipse开发工具建立Addition项目,实现教材内容中的接口应用案例,体会Java接口的用法。