Java 接口

接口(interface)是 Java 中"约定能力"的类型:只声明方法(做什么),不关心实现(怎么做)。任何类只要 implements 一个接口,就承诺具备该能力。接口是实现多态与解耦的最强工具,JDBC、集合框架、Servlet 都在"面向接口编程"。

定义与特性

接口用 interface 关键字定义,方法默认是 public abstract,字段默认是 public static final(常量):

interface USB {
    String NAME = "USB设备";      // 默认 public static final 常量
    void connect();               // 默认 public abstract 方法
}

接口不能实例化,也没有构造方法;除了 JDK8 起的默认方法,接口方法都没有方法体。

实现接口:implements 与多实现

类用 implements 实现接口,必须实现全部抽象方法。一个类能实现多个接口,弥补了 Java 单继承的限制:

interface Usb { void charge(); }
interface Wifi { void connect(); }
class Phone implements Usb, Wifi {     // 一个类实现多个接口
    @Override public void charge() { System.out.println("USB 充电中"); }
    @Override public void connect() { System.out.println("连接 Wi-Fi"); }
}

片段需放进 main 方法中运行:

Usb u = new Phone();       // 接口引用指向实现类对象
u.charge();
Phone p = new Phone();
p.connect();
// 输出:USB 充电中
// 输出:连接 Wi-Fi

JDK8 默认方法与静态方法

JDK8 起,接口可以用 default 写"带实现"的方法,实现类可不重写直接用;static 方法则用接口名直接调用:

interface Remote {
    void on();                          // 抽象方法
    default void off() {                // 默认方法:有方法体
        System.out.println("已关闭");
    }
    static String tip() {               // 静态方法
        return "长按电源键开机";
    }
}

给老接口加新方法时,default 让已有实现类不修改也能编译通过;必要时实现类再重写覆盖默认行为。

接口与抽象类区别表

对比抽象类接口
关键字abstract classinterface
继承方式extends(单继承)implements(可多实现)
构造方法可以有不能有
成员变量任意只能是常量
具体方法可以随意写只能 default/static
设计语义is-a,代码复用can-do,能力契约

经验法则:需要公共字段和代码复用用抽象类;需要"具备某能力、多实现、跨继承树"用接口。

接口可以继承接口

接口用 extends 继承另一个接口,且可多继承,得到的是方法的"并集约定":

interface Charger {
    void charge();
}
interface FastCharger extends Charger {   // 接口继承接口
    void fastCharge();
}

实现 FastCharger 的类,必须同时实现 charge() 和 fastCharge() 两个方法。

接口回调思想

把接口对象作为参数传给方法,方法在合适的时机调用它,这就是"回调":调用方定好行为,执行方负责触发。典型如给按钮注册点击监听:

interface OnClick { void click(); }

void bind(OnClick l) {      // 形参是接口
    l.click();              // 时机到了就回调
}

// —— 片段需放进 main 方法中运行 ——
bind(new OnClick() {        // 匿名内部类实现接口
    @Override public void click() { System.out.println("按钮被点击"); }
});
// 输出:按钮被点击

接口是"能力的契约":interface 声明方法、implements 多实现、default 平滑升级、extends 组合约定。让上层依赖接口而非具体类,系统就更容易扩展、测试与替换。

笔记加载中…