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 接口,它必须提供接口中定义的所有方法的实现,否则编译器会报错。
接口的作用
- 约定行为:接口规定了类必须提供哪些行为,这使得开发者可以更清晰地理解和遵循规则,确保代码的可预测性。
- 解耦和灵活性:接口提供了一种机制,使得不同的类可以实现相同的接口,并且这些类可以拥有不同的实现。这样,代码就解耦了,因为使用接口的代码不关心具体的实现,只关心接口规定的行为。
- 强制实现:如果一个类声明实现了某个接口,编译器会强制检查类是否提供了接口中所有方法的实现。如果缺少任何方法,编译器将抛出错误。
接口和类的关系
- 类:类可以有方法的实现,表示具体的对象和行为。
- 接口:接口只能定义方法的签名,不能有方法的实现。它主要用来定义类应该具备哪些行为。
接口是面向对象编程中的一种非常强大的工具,尤其在大型系统中,接口帮助我们保证代码的结构和可扩展性。通过接口,不同的类可以遵循相同的行为约定,而具体的实现可以各不相同。