为什么静态方法在接口中被视为“实用方法”?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么静态方法在接口中被视为“实用方法”?相关的知识,希望对你有一定的参考价值。

我正在阅读有关接口的Java文档,并且到达了有关default methods的章节。据我所知,当您定义一个接口并稍后向其添加方法时,实现此接口的所有类都将中断并且需要实现新方法。

因此,文档简要提到静态方法作为缓解此问题的选项,但也指出它们将被视为“实用方法”而非必要:

如果他们将它们作为静态方法添加,那么程序员会将它们视为实用方法,而不是必要的核心方法。

为什么会这样?/为什么他们被视为“不必要”?

答案

静态方法不适用于类的实例,但它们是类本身的一部分。它们最常用于实用类型的任务,因此有点与面向对象相矛盾,因此应该稀疏地使用它们。

但是,默认方法!=静态方法。文档中只提到静态方法,以显示在默认方法之前如何将某些内容添加到接口而不会破坏所有实现。

默认方法是通过为该方法指定默认实现(即使它只是一个throw new NotImplementedException())来向接口添加功能而不破坏现有命令的另一种方法。这些方法可以通过实现此接口的具体类来实现,以提供它们所针对的实际功能,从而覆盖该方法的默认实现。

使用静态方法这是不可能的,因为它们属于类对象,而不属于实例,因此不能被子类或实现覆盖。

另一答案

因为你通常在static上调用class方法而不是在接口上,例如:

Integer.parseInt(); - 被称为混凝土类Integer

另一答案

因为静态方法是自包含的,所以它们不依赖于接口中的其他方法。而且,java代码中的大多数静态方法实际上都是实用方法。

以上是关于为什么静态方法在接口中被视为“实用方法”?的主要内容,如果未能解决你的问题,请参考以下文章

为啥将静态方法视为方法?

虚函数纯虚函数和接口的实用方法和意义

ISO-8859-1 字符在 XSLT 属性中被视为 UTF-8

如何停止。在 SQLite FTS4 中被视为分隔符

表达式列表在初始化程序中被视为复合表达式

onRequestPermissionsResult 永远不会在片段中被调用 [重复]