之前从未为“简化生活”编写过自己的界面。为什么?他们有什么有趣的地方?
在评论中,他们要求我将我的知识和工作领域添加到问题中。我编写 android 应用程序和...一切。我对接口一无所知,只知道你可以从接口继承一个类并覆盖方法。但为什么?接口的意义?
感谢您的精彩回答!
之前从未为“简化生活”编写过自己的界面。为什么?他们有什么有趣的地方?
在评论中,他们要求我将我的知识和工作领域添加到问题中。我编写 android 应用程序和...一切。我对接口一无所知,只知道你可以从接口继承一个类并覆盖方法。但为什么?接口的意义?
感谢您的精彩回答!
接口提供了所有实现该接口的类都必须遵循的契约,并且是一种抽象,显示了对象可以做什么,但它如何做并不重要。
实际上,这会导致以下情况:
使用接口时,可以用实现相同接口的另一个类替换实现接口的一个类,而无需重写整个代码。例如,如果方法被传递
Map:TreeMap那么如果您想使用instead of ,则不必更改方法描述HashMap。同样,如果一个方法返回
Map: 它可以开始返回TreeMap而不是HashMap,并且不会有圣经悲剧,因为处理此方法返回值的代码处理Map.这增加了代码的灵活性:更容易从一个数据源切换到另一个数据源,从一种实现切换到另一种实现。
它对于测试也很有用,因为它允许您使用Mock 对象而不是真实对象。
如果您需要以相同的方式处理元素集合(例如,
ArrayList并由y方法Set返回),那么这样描述该方法就足够了:keySet()HashMap这里使用泛型是为了更加真实。在不使用接口的情况下,我不得不创建两种方法:
然后复制代码,或者,例如,在第二个方法 create
ArrayList中,将所有元素添加到其中Set并调用第一个方法。此外,接口的使用允许您将实现相同接口的不同对象组合到一个列表中,并以相同的方式处理它们:
在不使用接口的情况下,人们将不得不为每种类型的动物使用单独的逻辑实现来隔离“if-else”(或“switch-case”)。
就我个人而言,理解接口本质的最明显方法是集合以及与它们相关的所有内容。很可能是这样,因为他们必须经常与他们一起工作。
OOP的主要特征之一是由于正确的架构组件而摆脱了逻辑重复。对于这种情况(一般意义上),发明了接口和抽象类。
假设我在真空中有一个球形方法,可以对集合进行一些处理:
这里的便利之处在于,只有在 Java 本身中,这个接口的实现才相当多,(更多)我可以为它们中的每一个使用这个逻辑。
现在我有另一种实现某些功能的方法:
这里我不得不用到三个收集方法:isEmpty()、add()、remove()。但是,所有这些方法都在 Collection 接口中进行了描述,无需传递带有实现作为参数的“更高”接口或类。正如我在上面所写的,这个解决方案将允许我问心无愧地为其他实现重复使用这个方法。
此外,在我看来,回调是使用接口的一个很好的例子:
最重要的是,在回调接口中,您明确定义了一个泛型(如果您想将参数传递给方法和/或从方法接收对象)并描述契约。在我的例子中,这是一种将参数作为输入的方法。
doSomeAwesome()现在,我可以实现我选择的回调方法,从而使用附加逻辑扩展该方法的使用。如果执行代码,输出将是:
UPD: 还应该理解还有其他使用接口的上下文:
因为接口是一种抽象,它告诉您做什么,而不是如何做。“生活的简化”在于接口指定了统一的预期行为,无论您在哪里遇到它(当然,除非程序员根本不在乎接口契约)。一般来说,要理解我在这里写的内容,您应该阅读有关 OOP 的书籍。
接口真的让生活更轻松。假设在 android 中我使用一个接口用于导航
gps Google api,一个接口用于监听器(接口几乎无处不在,甚至在流中)并且从 Java-8 开始,接口也实现了主体,所以你不仅可以写条件,还可以写主体接口。但是是否使用它们取决于每个人。实现它们的接口并不总是程序员的责任。