Java 9 界面对比 Class

Java 9 Interface vs Class

由于 Java 9 将允许我们在接口中定义 privateprivate static 方法,所以 interfaceclass? 而且,Java是不是慢慢走向多重继承?

子类不继承私有方法,因此该特性不影响实现类。我相信接口中的私有方法允许我们在默认方法之间共享代码。

Java 接口仍然不能有非静态成员。这是一个很大的区别,而不是多重继承 IMO。

Java9个接口仍然不能包含字段和构造函数。这使得 类 和接口之间存在巨大差异,因此 Java 9 与多重继承相去甚远。

Java9 中的私有接口方法与其他私有方法完全一样:它们必须有一个主体(即使是抽象的类)并且不能被子[=46=调用或覆盖].因此,它们并不真正与继承交互。说到哪个(尤其是多重继承),有(至少?)三种:

  • 类型的继承意味着一种类型可以成为另一种类型,例如String 是一个 Object。 Java 从第一天起就允许类型的多重继承(通过接口)。
  • 行为的继承表示一种类型可以继承另一种类型的行为。在Java8之前,只有类可以实现方法,所以只有这种单继承。使用 Java 8 个默认方法,允许接口实现方法,从而提供 Java 多重行为继承。
  • 状态的继承意味着一个类型继承另一个类型的内部状态(即字段)。就目前而言(Java 9 和目前为未来 Java 版本提出的所有建议),只有 类 可以有状态,所以只有这种类型的单一继承。

如您所见,私有接口方法不要在此处添加任何内容。

关于你的接口和类如何比较的问题,有两个主要区别:多重继承和状态。接口支持前者,类可以有后者。由于状态在典型的 OOP 中有点重要,因此 类 将保持相关性。

如果接口有办法强制实现具有特定的非 public 字段或直接定义一个本身,那么游戏将会改变并且接口可以与 [=46= 竞争].

Java 版本 9 中的接口具有私有方法但静态私有。引入该功能以允许模块化方法。一个函数应该承担一个责任,而不是使用冗长的默认方法。它与多重继承无关。 私有静态方法越多,你就越能写出干净且可重用的代码。无论如何,无论是public还是受保护的静态方法都不能被覆盖。

虽然这是一个老问题,但让我也提供我的意见:)

  1. abstract class: 在abstract里面class我们可以声明实例 child class

    所需的变量

    接口:接口内部每个变量总是public静态 最后我们不能声明实例变量

  2. 摘要class:摘要class可以谈谈object

    的状态

    接口:接口永远不能谈论object

  3. 的状态
  4. abstract class: 在 Abstract class 中我们可以声明构造函数

    接口:在接口内部我们不能声明构造函数作为
    的目的 constructors是初始化实例变量。所以呢 如果我们没有实例,是否需要构造函数 接口中的变量.

  5. 抽象class: 在抽象里面class我们可以声明实例和静态块

    接口:接口不能有实例块和静态块。

  6. 摘要class:摘要class不能引用lambda表达式

    接口:只有一个抽象方法的接口可以引用lambda表达式

  7. abstract class:在抽象class内部我们可以覆盖OBJECTCLASS方法

    接口: 我们不能覆盖接口内的 OBJECT CLASS 方法。

最后我要注意:

接口中的默认方法concepts/static方法概念只是为了保存实现classes,而不是提供有意义的有用实现。默认 methods/static 方法是一种虚拟实现,"if you want you can use them or you can override them (in case of default methods) in implementation class" 因此,无论何时在接口中添加新方法时,我们都无需在实现 classes 中实现新方法。 因此接口永远不能等于抽象 classes.