目录
一、概念
1. 生活中的接口:
例如计算机的USB接口,它的规范有:传输速度为10Gbit/s,三段式电压5V/12V/20V,最大供电100W等,
它的主要功能是数据传输。
但是数据的传输过程不是USB接口存在了就能实现,还必须有支持USB接口的外部设备,例如U盘和鼠标。
所以从中得出,接口的本质就是一种约定、规范、标准。
2. java中的接口
是一组抽象方法、常量和内嵌类型的集合。
接口是java的一种引用数据类型,接口采用抽象的形式来描述约定,因此接口只有被类实现之后才有意义。
上述例子中,U盘和鼠标支持USB接口,因此,U盘和鼠标可被称作USB接口的实现类。
二、接口的声明
java使用interface关键字声明接口
以USB接口为例:USB接口有传输速率、功率等的规范,具有数据传输的功能。
public interface USB {
public static final double speed = 10; //传输速率
public static final double power = 100; //功率
public abstract void dataTrasmit(); //数据传输方法约定
}
由于接口中不能声明变量,只能声明常量,故常量前可以省略修饰符public static final 。
接口中默认方法只能是公共的、抽象的,所以方法前可以省略修饰符 public abstract 。
故上述代码可以简化成:
public interface USB {
double speed = 10; //传输速率
double power = 100; //功率
void dataTrasmit(); //数据传输
}
三、接口的实现类
(1) 声明接口的实现类--Mouse(也就是让鼠标支持USB接口),使用implements关键字表示“实现”的意思
public class Mouse implements USB{
//必须实现接口中的所有方法
public void dataTrasmit() {
//模拟数据传输过程
System.out.println("鼠标正在传输数据:");
//继承了接口中的所有常量
System.out.println("数据传输速率:" + speed);
}
}
(2) 声明接口的实现类--U盘FlashDisk类
public class FlashDisk implements USB{
@Override
public void dataTrasmit() {
System.out.println("U盘正在传输数据:");
System.out.println("数据传输速率:" + speed);
}
}
(3) 测试主类:接口引用实现类实例
public class USBTest {
public static void main(String[] args) {
//USB usb = new USB(); //报错,接口不能实例化
USB usb = new Mouse(); //接上鼠标
usb.dataTrasmit(); //测试的是鼠标的数据传输
usb = new FlashDisk(); //改成插上U盘
usb.dataTrasmit(); //测试的是鼠标的数据传输
}
}
四、接口的意义
1. java采用接口实现多继承:一个类实现多个接口,就具有多种特性。
例如鼠标不仅可以通过USB接口传输数据到计算机,鼠标也可以通过蓝牙传输数据。
(1) 声明蓝牙接口:
public interface Bluetooth {
double speed = 1;
void dataTrasmit(); //传递数据
}
(2) 让鼠标新增蓝牙功能,implememts 后面用逗号隔开多个接口即可。
public class Mouse implements USB,Bluetooth{
public void dataTrasmit() {
//模拟数据传输过程
System.out.println("鼠标正在传输数据...");
}
}
2. 只继承约定而不继承实现。即使一个类实现的多个接口中包含相同的方法声明,该类也只给出一种实现,没有二义性。
换言之,即使其中存在约定冲突,也不存在实现冲突,对系统的运行没有影响。
例如,一个既支持USB接口又支持蓝牙接口的鼠标,虽然这两个接口都具有数据传输的功能,
但是真正在使用的时候,只用其中一种方式。
3. 接口为多个不相关的类约定某一特性的方法声明,在类型层次中表达对象拥有的属性。
例如:蓝牙功能不仅仅只有鼠标有,话筒、音响等都可以支持,将来可能还有很多设备实现这种功能。
4. 方便构建对象体系,让系统易于扩展。
一个接口对象可以引用实现该接口的类及其子类实例。
接口的实现类之间可以相互替换。
五、注意事项
1. 一个类(class)的父类型包括:所继承的父类以及所实现的所有接口
2. 接口的实现类必须实现接口的所有抽象方法,除非该类是抽象的。