原文: https://javatutorial.net/java-interface-example

在本教程中,我将向您展示如何创建和使用 Java 接口。 与往常一样,我将演示 Java 接口的实际示例。

Java 接口示例 - 图1

什么是 Java 接口?

与许多其他 Java 概念一样,接口是从真实场景中派生而来的,其主要目的是按照严格的规则使用对象。 例如,如果您想打开洗衣机来洗衣服,则需要按开始按钮。 此按钮是您与洗衣机内部电子设备之间的接口。 Java 接口具有相同的行为:它们对如何与对象进行交互设置了严格的规则。 要查找有关 Java 对象的更多信息,请阅读本教程

Java 接口表示一组带有空主体的方法。 嗯,在接口中包含完整的方法列表不是强制性的 - 它们可以为 0 或更多…但是,无论方法的数量如何,它们都应该为空。

创建一个接口

以洗衣机为例,使用一种方法startButtonPressed()创建一个名为WashingMachine的接口

  1. public interface WashingMachine {
  2. public void startButtonPressed();
  3. }

定义接口就这些了。 注意关键字interface的用法。 方法startButtonPressed()没有正文。 它以结尾; 当然,您也可以使用具有返回类型和参数的方法,例如:public int changeSpeed(int speed);

如何实现接口

现在,我们将创建一个实现我们的接口的类。 继续该示例,我们将创建具有“开始”按钮的特定品牌的洗衣机。

  1. public class SamsungWashingMachine implements WashingMachine {
  2. @Override
  3. public void startButtonPressed() {
  4. System.out.println("The Samsung washing machine is now running.");
  5. }
  6. }

我们在类声明中使用implements关键字。 我们需要实现startButtonPressed方法(为它提供一些功能),否则我们的类将无法编译。

请注意,您可以在一类中实现多个接口。 您只需要在类声明中用逗号分隔接口名称,如下所示:

  1. public class SamsungWashingMachine implements WashinMachine, Serializable, Comparable<WashinMachine> { ... }

测试你的接口

现在让我们创建一个小程序来测试我们的接口和实现

  1. public class Test {
  2. public static void main(String[] args) {
  3. WashinMachine samsungWashinMachine = new SamsungWashingMachine();
  4. samsungWashinMachine.startButtonPressed();
  5. }
  6. }

该程序的输出将是:

  1. The Samsung washing machine is now running.

使用接口声明特定的对象特征

Java 接口还有另一种常见用法 - 告诉对象具有特定用途或特征。

让我们再举一个真实的例子。 你是在树林里生存。 您会发现其他物体,并将它们放在背包中以备后用。 休息时,您会浏览找到的物体并食用一次可食用的物体。

首先,让我们定义一个根本没有方法的名为FoundObject的接口。 这些都是我们在树林里发现的物体:

  1. public interface FoundObject {
  2. }

现在我们定义第二个接口Eatable。 我们将仅使用它来表示对象是否可食用

  1. public interface Eatable {
  2. public void eat();
  3. }

通过以下三个类,我们将定义我们在树林中找到的对象–苹果,树莓和石头

  1. public class Apple implements FoundObject, Eatable {
  2. private String name;
  3. public Apple(String name) {
  4. this.name = name;
  5. }
  6. @Override
  7. public void eat() {
  8. System.out.println("Yummy! you eat some " + this.name);
  9. }
  10. }
  1. public class Raspberry implements FoundObject, Eatable {
  2. private String name;
  3. public Raspberry(String name) {
  4. this.name = name;
  5. }
  6. @Override
  7. public void eat() {
  8. System.out.println("Yummy! you eat some " + this.name);
  9. }
  10. }
  1. public class Stone implements FoundObject {
  2. private String name;
  3. public Stone(String name) {
  4. this.name = name;
  5. }
  6. }

现在让我们编写生存程序。 我们将在背包(数组)中收集找到的物品,并尝试吃掉它们

  1. public class WoodsSurvival {
  2. public static void main(String[] args) {
  3. // create an array of type FoundObject
  4. FoundObject backpack [] = new FoundObject[3];
  5. // create the objects we found in the woods
  6. FoundObject apple = new Apple("apple");
  7. FoundObject stone = new Stone("stone");
  8. FoundObject raspberry = new Raspberry("raspberry");
  9. // add the found objects to the backpack
  10. backpack[0] = apple;
  11. backpack[1] = stone;
  12. backpack[2] = raspberry;
  13. // iterate over the found objects
  14. for (int i=0; i<backpack.length; i++) {
  15. FoundObject currentObject = backpack[i];
  16. // check if object is eatable
  17. if (currentObject instanceof Eatable) {
  18. // cast the object to eatable and execute eat method
  19. ((Eatable) currentObject).eat();
  20. }
  21. }
  22. }
  23. }

该程序的输出为:

  1. Yummy! you eat some apple
  2. Yummy! you eat some raspberry

代码说明了

首先,我们创建接口FoundObject的唯一目的是表示特定类型的对象,因此我们可以将它们放在同一数组中。 我们创建Eatable接口以标记可以食用的对象。

当我们创建三个对象(苹果,树莓和石头)时,我们将所有对象的类都声明为implements FoundObject,而我们可以食用的对象也实现了Eatable接口。

WoodsSurvival类中,我们首先创建一个FoundObject类型的数组。 我们稍后创建的三个对象的类型也都是FoundObject,因此我们可以将它们放在同一数组中。 关注本文,以了解有关 Java 数组的更多信息。

迭代数组时,我们检查当前对象是否为Eatable类型。 我们在instanceof keyford的帮助下进行此操作。 如果两个对象属于同一类型,则instanceof返回true。 在我们的案例中,使用instanceof Eatable进行检查时,苹果和树莓将返回 true,因为两者均实现了Eatable接口。 为了能够执行eat()方法,我们需要首先将对象显式类型转换为Eatable。 我们使用以下代码行实现此目的:

  1. ((Eatable) currentObject).eat();

我们无法执行石头对象的eat方法,因为它不是Eatable类型。

结论

可以使用抽象类集合继承以更时髦的方式编写上面的代码示例。 其中一些是更高级的主题,将在下一个教程中进行说明。 这是一个初学者教程,旨在仅说明 Java 接口。