前戏
在 Java 中,接口是一种将方法声明和抽象方法的定义分离的特殊 abstract 类型。当类实现接口时,它必须实现接口中声明的所有方法。
接口可以声明一组方法,但不提供实现。它是一个完全抽象的类,不能直接实例化,需要由实现该接口的类提供具体实现。
为了使用接口,就必须定义一个实现了该接口的子类。该子类会提供实现接口中定义的所有方法。
接口的定义
使用 interface
关键字定义一个接口。假如要定义一个名为 "Animal" 的接口,可以写成如下形式:
interface Animal {
void eat();
void travel();
}
接口的方法默认都是抽象的,并没有实现内容,它们的实现需要在实现接口的类中完成。
接口的实现
要使用接口,必须实现它。让我们通过一个例子来理解如何实现该接口。假设我们要创建一个能飞的大雁类,它实现了 Animal
接口。能飞的大雁类的代码如下:
class FlyingAnimal implements Animal {
public void eat() {
System.out.println("FlyingAnimal eats");
}
public void travel() {
System.out.println("FlyingAnimal travels");
}
public void fly() {
System.out.println("FlyingAnimal is flying");
}
}
注意:实现接口的类必须包含完整定义的所有方法。
在实现接口的过程中,抽象接口的方法必须被完全实现。如果实现的类还要扩展接口,就需要使用 implements
关键字定义,并实现所有其它方法。
在实现接口的类中,你可以使用 extends
操作符继承一个类,同时使用 implements
操作符实现多个接口。
接口的好处
接口能够带来好处,包括但不限于以下几点:
- 实现数据类型的标准化。
- 封装特定于实现的代码。
- 允许多继承。
- 降低了耦合度。
- 接口的实现在 Java 中是动态绑定的,这意味着实现某个接口的对象可能会在运行时发生改变。
总之,接口提供了宣传构件和直观思想的好方法,同时也提高了代码的可读性,并且可以在设计时强制要求某个特定行为的实现。