在 Java 中,接口(Interface)是一种抽象类型,用于定义类的行为规范(仅声明方法,不提供具体实现),主要作用是实现多态、解耦代码以及弥补类单继承的局限性。以下是接口的定义和使用方式的详细说明:

一、接口的定义

使用 interface 关键字定义接口,语法结构如下:

[修饰符] interface 接口名 [extends 父接口列表] {
    // 1. 常量(默认被 public static final 修饰,必须初始化)
    数据类型 常量名 = 初始值;

    // 2. 抽象方法(默认被 public abstract 修饰,无方法体)
    返回值类型 方法名(参数列表);

    // 3. 默认方法(JDK8+,用 default 修饰,有方法体,实现类可直接使用或重写)
    default 返回值类型 方法名(参数列表) {
        // 方法实现
    }

    // 4. 静态方法(JDK8+,用 static 修饰,有方法体,属于接口本身)
    static 返回值类型 方法名(参数列表) {
        // 方法实现
    }

    // 5. 私有方法(JDK9+,用 private 修饰,有方法体,仅接口内部调用)
    private 返回值类型 方法名(参数列表) {
        // 方法实现
    }
}

注意

  • 接口不能被实例化(无法用 new 创建对象)。
  • 接口的访问修饰符只能是 public 或默认(包内可见)。
  • 接口可以继承多个父接口(用 extends 关键字,逗号分隔),但类只能单继承。

二、接口的使用(类实现接口)

类通过 implements 关键字实现接口,必须重写接口中所有的抽象方法(除非该类是抽象类)。

语法:

[修饰符] class 类名 [extends 父类] implements 接口1, 接口2, ... {
    // 重写所有接口的抽象方法
    @Override
    方法实现...
}

三、完整示例

以下示例通过 “支付场景” 演示接口的定义与使用:

1. 定义接口(支付规范)
// 支付接口:定义支付行为的规范
interface Payable {
    // 常量:支付类型标识
    String ONLINE_PAY = "在线支付";
    String OFFLINE_PAY = "线下支付";

    // 抽象方法:必须被实现类重写
    boolean pay(double amount); // 执行支付
    String getPaymentInfo();    // 获取支付信息

    // 默认方法:提供通用实现(如日志记录)
    default void logPayment(double amount) {
        System.out.println("记录支付金额:" + amount + "元");
    }

    // 静态方法:接口工具方法(如校验金额)
    static boolean validateAmount(double amount) {
        return amount > 0;
    }
}
2. 实现接口(具体支付方式)
// 支付宝实现支付接口
class Alipay implements Payable {
    @Override
    public boolean pay(double amount) {
        if (!Payable.validateAmount(amount)) { // 调用接口静态方法
            return false;
        }
        logPayment(amount); // 调用接口默认方法
        System.out.println("支付宝支付成功");
        return true;
    }

    @Override
    public String getPaymentInfo() {
        return "支付方式:支付宝(" + ONLINE_PAY + ")"; // 使用接口常量
    }
}

// 微信支付实现支付接口
class WechatPay implements Payable {
    @Override
    public boolean pay(double amount) {
        if (!Payable.validateAmount(amount)) {
            return false;
        }
        logPayment(amount);
        System.out.println("微信支付成功");
        return true;
    }

    @Override
    public String getPaymentInfo() {
        return "支付方式:微信支付(" + ONLINE_PAY + ")";
    }
}
3. 测试接口的使用
public class InterfaceTest {
    public static void main(String[] args) {
        // 接口多态:接口引用指向实现类对象
        Payable alipay = new Alipay();
        Payable wechat = new WechatPay();

        // 调用实现类的方法(统一通过接口调用)
        alipay.pay(100.5);
        System.out.println(alipay.getPaymentInfo());

        wechat.pay(200);
        System.out.println(wechat.getPaymentInfo());

        // 调用接口静态方法
        System.out.println("金额是否有效:" + Payable.validateAmount(-50)); // false
    }
}
运行结果:
记录支付金额:100.5元
支付宝支付成功
支付方式:支付宝(在线支付)
记录支付金额:200.0元
微信支付成功
支付方式:微信支付(在线支付)
金额是否有效:false

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐