java
public class VehicleExample {
// 定义接口
public interface Vehicle {
void start(); // 启动车辆
void stop(); // 停止车辆
void status();// 检查车辆状态
}
public interface InnerVehicleExample {
void student();
}
// 实现接口的类:Car
public static class Car implements Vehicle {
@Override
public void start() {
System.out.println("Car is starting.");
}
@Override
public void stop() {
System.out.println("Car is stopping.");
}
@Override
public void status() {
System.out.println("Car is run");
}
}
// 实现接口的类:Bike
public static class Bike implements Vehicle {
@Override
public void start() {
System.out.println("Bike is starting.");
}
@Override
public void stop() {
System.out.println("Bike is stopping.");
}
@Override
public void status() {
System.out.println("Bike is running.");
}
}
// 主方法
public static void main(String[] args) {
Vehicle myCar = new Car();
Vehicle myBike = new Bike();
myCar.start(); // 输出: Car is starting.
myCar.stop(); // 输出: Car is stopping.
myCar.status();
myBike.start(); // 输出: Bike is starting.
myBike.stop(); // 输出: Bike is stopping.
myBike.status();
}
}
什么是接口?
在Java中,接口是一种特殊的引用数据类型,它仅包含常量和抽象方法。接口定义了一组方法的签名,这些方法将由实现接口的类来实现。相比于类的继承,接口更多地关注行为,允许不同的类实现相同的功能。
接口的优点
- 抽象化:接口让我们可以定义一个规范,任何实现该接口的类都必须遵循这个规范。这就鼓励了代码的高度抽象化,使得系统的设计更加灵活。
- 解耦应用程序:使用接口可以减少类之间的依赖性,即使接口的实现发生变化,只要保证新的实现符合接口定义的行为,其他依赖于该接口的代码无需修改。
- 多重继承:Java不支持类的多重继承,但一个类可以实现多个接口,从而克服了这一限制,这使得我们可以组合不同的类行为。
- 提高可测试性:接口使得单元测试变得更加简单。我们可以创建一个接口的模拟实现,并测试依赖于该接口的代码,而无需实际依赖于它的实现。
代码解析
在上述代码示例中,我们定义了一个 Vehicle
接口,包含了 start()
、stop()
和 status()
三个方法。这些方法代表了车辆的基本行为。
- 接口的实现 :我们创建了两个类
Car
和Bike
,分别实现了Vehicle
接口。在每个类中,实现了接口方法,定义了具体的行为,比如如何启动和停止车辆,以及获取车辆状态。 - 主方法的调用 :在
main
方法中,我们创建了Car
和Bike
的实例,并通过接口类型的变量myCar
和myBike
调用它们的行为。这种方式显示了接口的多态性。