抽象类是从多个类中抽象出来的模版,若要将这种抽象进行的更为彻底,就得用到一种特殊的“抽象类”——接口。
接口只定义了类应当遵循的规范,却不关心这些类的内部数据和其方法内的实现细节。
接口只规定了这些类里必须提供的方法;从而分离了规范和实现.增强了系统的可拓展性和维护性;
- [修饰符] interface 接口名 extends 父接口1,父接口2....
- 没有构造方法,不能实例化;
- 接口只能继承接口,不能继承类
- 接口里的方法默认修饰符是public abstract
- 接口里的字段全是全局常量,默认修饰符是public static final 接口里的成员包括(主要是前两个)
- 全局常量
- 公共的抽象方法
- 内部类(包括内部类,内部接口,内部枚举类); 使用接口
- [修饰符] class 类名 implements 接口1,接口2...
一般的我们习惯在接口名前加上I字母,用于区分类和接口;
package day3;
/**
* USB标准
* @author well
*
*/
interface IUSB{
/**
* 接口中的方法,其实现类必须进行覆写
*/
void run();
}
/**
* 使用USB标准的鼠标设备
* @author well
*
*/
class MouseUSBImpl implements IUSB{
@Override
public void run() {
System.out.println("Mouse is working");
}
}
/**
* 使用USB标准的打印机设备
* @author well
*
*/
class PrinterUSBImpl implements IUSB{
@Override
public void run() {
System.out.println("Printer is working");
}
}
/**
* PC类,用于统一运行USB设备
* @author well
*
*/
class PC{
/**
* 将USB设备插入PC中,使用可变参数实现将多个USB设备插入PC中
* @param m USB设备列表
*/
public void plugIn(IUSB ... m){
for (int i = 0; i < m.length; i++) {
m[i].run();
}
}
}
public class InterfaceDemo {
public static void main(String[] args) {
IUSB a = new MouseUSBImpl();
IUSB b = new PrinterUSBImpl();
PC p = new PC();
p.plugIn(a,b);
}
}
打印结果为:
Mouse is working
Printer is working