当您仍然需要在实现接口的每个类中单独定义每个方法体时,接口有什么好处?[复制]

What is the benefit of interfaces when you still need to define each method body separately in each class that implements it? [duplicate]

提问人:TorusWithSprinkles 提问时间:7/2/2020 更新时间:7/2/2020 访问量:473

问:

我试图围绕界面进行思考,并且我一直在阅读很多关于该主题的类似问题/答案,但它仍然没有与我一起点击。我明白界面的字面含义,但我不明白你为什么要使用它。

因此,一个接口包含一堆空函数,然后在一个类中实现该接口。但我不明白的是,您仍然必须为您从接口获取的任何函数编写一个完整的函数声明。假设你的接口中有一个函数'void printHello()',并在一个类中实现了该接口。你仍然需要写:

public void printHello() { 
    System.out.println("Hello!");
}

这是一个完整的函数声明。您可以删除“implements interface”命令,实际上什么都不会改变,您仍然会有一个工作函数“printHello()”。所以从功能上讲,接口不是基本上什么都不做吗?为了更进一步,你可以有另一个类也实现相同的接口,但你可以让同一个函数做一些完全不同的事情:

public void printHello() { 
    System.out.println("Bababooey!");
}

因此,它不像是预定义函数,因此您可以像类/对象那样在任何地方调用它们。如果是这种情况,界面真正提供什么?

Java 接口 实现

评论

0赞 mre 7/2/2020
对于所有类的实现都相同的情况,可以使用默认方法 - docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html
4赞 Kayaman 7/2/2020
“如果是这样的话,界面到底提供了什么?”合同。
0赞 username 7/2/2020
由于 Java 没有结构类型,它允许您拥有一种方法,只要它们遵守某种约定,就可以接受各种对象。例如,你可以让所有类型的类定义一个方法而不实现,但你需要为每个类定义一个单独的方法。你总是可以有一个名为 的类,但你只能扩展一个类,而你可以实现任意数量的接口compareToComparableComparable
0赞 username 7/2/2020
此外,在 Java 8+ 中,您可以在接口中使用默认方法以避免代码重复
0赞 username 7/2/2020
另请参阅接口和类之间有什么区别,以及当我可以直接在类中实现方法时,为什么要使用接口?

答:

1赞 jwpol 7/2/2020 #1

通过使用接口,您将逻辑实现的责任外包给实现该接口的类,这称为 API。 假设你有一个接口,它是由一堆不同的类实现的,比如 或 。通过使用,您可以灵活地利用任何根据您的特定需求而变化的实现,并在以后简单地切换到不同的实现,而您的代码保持不变 - 您仍然使用 .因此,做一个你不感兴趣的方法,或者你不关心它是如何完成的,你只想在集合中添加一个元素,以及它是如何在内部实现的,这不是你的事。ListLinkedListArrayListListListListadd