Java接口 #

一、接口概述 #

接口是一种引用类型,定义了一组抽象方法,是类的行为规范。

1.1 接口特点 #

  • 方法默认是public abstract
  • 变量默认是public static final
  • 不能实例化
  • 可以多实现

1.2 基本语法 #

java
public interface Flyable {
    // 常量
    int MAX_HEIGHT = 10000;
    
    // 抽象方法
    void fly();
}

二、接口定义 #

2.1 基本定义 #

java
public interface Animal {
    // 抽象方法
    void eat();
    void sleep();
}

2.2 接口成员 #

java
public interface MyInterface {
    // 常量:public static final
    int CONSTANT = 100;
    
    // 抽象方法:public abstract
    void abstractMethod();
    
    // 默认方法(Java 8+):public default
    default void defaultMethod() {
        System.out.println("默认方法");
    }
    
    // 静态方法(Java 8+):public static
    static void staticMethod() {
        System.out.println("静态方法");
    }
    
    // 私有方法(Java 9+)
    private void privateMethod() {
        System.out.println("私有方法");
    }
}

三、接口实现 #

3.1 implements关键字 #

java
public interface Flyable {
    void fly();
}

public class Bird implements Flyable {
    @Override
    public void fly() {
        System.out.println("鸟在飞");
    }
}

3.2 多实现 #

java
public interface Flyable {
    void fly();
}

public interface Swimmable {
    void swim();
}

public class Duck implements Flyable, Swimmable {
    @Override
    public void fly() {
        System.out.println("鸭子在飞");
    }
    
    @Override
    public void swim() {
        System.out.println("鸭子在游泳");
    }
}

3.3 继承同时实现接口 #

java
public class Animal {
    protected String name;
}

public interface Flyable {
    void fly();
}

public class Bird extends Animal implements Flyable {
    @Override
    public void fly() {
        System.out.println(name + "在飞");
    }
}

四、接口继承 #

4.1 接口继承接口 #

java
public interface A {
    void methodA();
}

public interface B {
    void methodB();
}

// 接口多继承
public interface C extends A, B {
    void methodC();
}

// 实现C需要实现所有方法
public class Impl implements C {
    @Override
    public void methodA() { }
    
    @Override
    public void methodB() { }
    
    @Override
    public void methodC() { }
}

五、默认方法 #

5.1 定义默认方法 #

java
public interface MyInterface {
    default void defaultMethod() {
        System.out.println("默认方法实现");
    }
}

public class MyClass implements MyInterface {
    // 可以不重写,使用默认实现
}

// 使用
MyClass obj = new MyClass();
obj.defaultMethod();  // 默认方法实现

5.2 重写默认方法 #

java
public class MyClass implements MyInterface {
    @Override
    public void defaultMethod() {
        System.out.println("重写的默认方法");
    }
}

5.3 多接口冲突 #

java
public interface A {
    default void method() {
        System.out.println("A的默认方法");
    }
}

public interface B {
    default void method() {
        System.out.println("B的默认方法");
    }
}

// 必须重写冲突的默认方法
public class C implements A, B {
    @Override
    public void method() {
        A.super.method();  // 调用A的默认方法
        // 或 B.super.method();
        // 或自定义实现
    }
}

六、静态方法 #

6.1 定义静态方法 #

java
public interface MathUtils {
    static int add(int a, int b) {
        return a + b;
    }
    
    static int multiply(int a, int b) {
        return a * b;
    }
}

// 使用
int sum = MathUtils.add(10, 20);
int product = MathUtils.multiply(5, 6);

七、函数式接口 #

7.1 概念 #

函数式接口是只有一个抽象方法的接口。

java
@FunctionalInterface
public interface Calculator {
    int calculate(int a, int b);
}

// 使用Lambda表达式
Calculator add = (a, b) -> a + b;
Calculator multiply = (a, b) -> a * b;

System.out.println(add.calculate(10, 20));      // 30
System.out.println(multiply.calculate(5, 6));   // 30

7.2 常用函数式接口 #

java
// Predicate<T>:判断
Predicate<Integer> isEven = n -> n % 2 == 0;
System.out.println(isEven.test(4));  // true

// Function<T, R>:转换
Function<String, Integer> toLength = s -> s.length();
System.out.println(toLength.apply("Hello"));  // 5

// Consumer<T>:消费
Consumer<String> print = s -> System.out.println(s);
print.accept("Hello");

// Supplier<T>:供给
Supplier<Double> random = () -> Math.random();
System.out.println(random.get());

八、接口应用 #

8.1 策略模式 #

java
public interface SortStrategy {
    void sort(int[] arr);
}

public class BubbleSort implements SortStrategy {
    @Override
    public void sort(int[] arr) {
        // 冒泡排序实现
    }
}

public class QuickSort implements SortStrategy {
    @Override
    public void sort(int[] arr) {
        // 快速排序实现
    }
}

public class Sorter {
    private SortStrategy strategy;
    
    public void setStrategy(SortStrategy strategy) {
        this.strategy = strategy;
    }
    
    public void sort(int[] arr) {
        strategy.sort(arr);
    }
}

8.2 回调机制 #

java
public interface Callback {
    void onSuccess(String result);
    void onError(String error);
}

public class Task {
    public void execute(Callback callback) {
        try {
            // 执行任务
            String result = doWork();
            callback.onSuccess(result);
        } catch (Exception e) {
            callback.onError(e.getMessage());
        }
    }
    
    private String doWork() {
        return "任务完成";
    }
}

// 使用
Task task = new Task();
task.execute(new Callback() {
    @Override
    public void onSuccess(String result) {
        System.out.println("成功: " + result);
    }
    
    @Override
    public void onError(String error) {
        System.out.println("错误: " + error);
    }
});

九、总结 #

概念 说明
interface 接口关键字
implements 实现接口
默认方法 default修饰,有默认实现
静态方法 static修饰,接口名调用
函数式接口 只有一个抽象方法

接口要点:

  • 方法默认public abstract
  • 变量默认public static final
  • 可以多实现
  • Java 8+支持默认方法和静态方法
  • 用于定义行为规范
最后更新:2026-03-26