抽象类是从多个类中抽象出来的模版,若要将这种抽象进行的更为彻底,就得用到一种特殊的“抽象类”——接口。
接口只定义了类应当遵循的规范,却不关心这些类的内部数据和其方法内的实现细节。
接口只规定了这些类里必须提供的方法;从而分离了规范和实现.增强了系统的可拓展性和维护性;
- [修饰符] 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