什么是interface?

如您所知,对象通过其公开的方法定义了它们与外界的交互。方法形成对象与外界的interface;例如,电视机正面的按钮是您与塑料 Shell 另一侧的电线之间的interface。您按下“电源”按钮可以打开和关闭电视。

在最常见的形式中,interface是一组具有空主体的相关方法。如果将自行车的行为指定为interface,则可能如下所示:

interface Bicycle {

    //  wheel revolutions per minute
    void changeCadence(int newValue);

    void changeGear(int newValue);

    void speedUp(int increment);

    void applyBrakes(int decrement);
}

要实现此interface,您的类的名称将更改(更改为特定品牌的自行车,例如ACMEBicycle),并且您可以在类声明中使用implements关键字:

class ACMEBicycle implements Bicycle {

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

   // The compiler will now require that methods
   // changeCadence, changeGear, speedUp, and applyBrakes
   // all be implemented. Compilation will fail if those
   // methods are missing from this class.

    void changeCadence(int newValue) {
         cadence = newValue;
    }

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

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

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

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

实现interface可以使类对其承诺提供的行为更加正式。interface在类和外部世界之间形成契约,并且该契约在编译时由编译器强制执行。如果您的类声称要实现一个interface,则在成功编译该类之前,该interface定义的所有方法都必须出现在其源代码中。

Note:

要实际编译ACMEBicycle类,您需要在实现的interface方法的开头添加public关键字。您稍后将在类和对象interface和继承的类中了解造成这种情况的原因。