4. Java中,什么是接口?

160 阅读3分钟

4. Java中,什么是接口?

在面向对象编程中,接口定义了类与外部世界的交互方式。接口是方法的集合,它不包含方法的具体实现,而是只定义了方法的签名(即方法的名称、参数类型和返回类型)。类实现接口时,必须提供接口中所有方法的实现。

接口就像是一个合同,规定了类必须遵守的行为。在现实生活中,这就像是你与电视机之间的接口:电视的按钮(例如电源按钮)是你与电视内部电路之间的接口。按下按钮会触发电视内部的某些行为,但你不需要知道这些行为是如何实现的。

接口的定义

在 Java 中,接口通常是定义了一组方法的集合,这些方法没有具体的实现。例如,我们可以定义一个 Bicycle 接口,列出所有自行车应该具有的行为方法:

interface Bicycle {

    // 每分钟车轮转速
    void changeCadence(int newValue);

    void changeGear(int newValue);

    void speedUp(int increment);

    void applyBrakes(int decrement);
}

在这个例子中,Bicycle 接口定义了四个方法:changeCadence()changeGear()speedUp()applyBrakes()。这些方法只声明了它们的签名,但没有具体的实现。

实现接口

当一个类实现接口时,它必须提供接口中所有方法的具体实现。我们可以创建一个 ACMEBicycle 类,并通过 implements 关键字让它实现 Bicycle 接口:

class ACMEBicycle implements Bicycle {

    int cadence = 0;
    int speed = 0;
    int gear = 1;

    // 实现接口中的方法
    public void changeCadence(int newValue) {
         cadence = newValue;
    }

    public void changeGear(int newValue) {
         gear = newValue;
    }

    public void speedUp(int increment) {
         speed = speed + increment;   
    }

    public void applyBrakes(int decrement) {
         speed = speed - decrement;
    }

    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" + 
             speed + " gear:" + gear);
    }
}

在这个 ACMEBicycle 类中,changeCadence()changeGear()speedUp()applyBrakes() 方法都得到了实现。由于这个类实现了 Bicycle 接口,它必须提供接口中定义的所有方法的实现,否则编译器会报错。

接口的作用

  1. 约定行为:接口规定了类必须提供哪些行为,这使得开发者可以更清晰地理解和遵循规则,确保代码的可预测性。
  2. 解耦和灵活性:接口提供了一种机制,使得不同的类可以实现相同的接口,并且这些类可以拥有不同的实现。这样,代码就解耦了,因为使用接口的代码不关心具体的实现,只关心接口规定的行为。
  3. 强制实现:如果一个类声明实现了某个接口,编译器会强制检查类是否提供了接口中所有方法的实现。如果缺少任何方法,编译器将抛出错误。

接口和类的关系

  • :类可以有方法的实现,表示具体的对象和行为。
  • 接口:接口只能定义方法的签名,不能有方法的实现。它主要用来定义类应该具备哪些行为。

接口是面向对象编程中的一种非常强大的工具,尤其在大型系统中,接口帮助我们保证代码的结构和可扩展性。通过接口,不同的类可以遵循相同的行为约定,而具体的实现可以各不相同。