随着Java 9允许在接口中定义private
和private static
方法,那么在interface
和class
之间还剩下什么区别呢?此外,Java是否正在逐渐向多继承迈进?
私有方法不会被子类继承,所以这个特性不会影响实现类。我认为接口中的私有方法允许我们在默认方法之间共享代码。
Java接口仍然不能拥有非静态成员。这是一个很大的区别,而且在我看来并不是多重继承。
Java 9接口仍然不能包含字段和构造函数。这使得类和接口之间有很大的区别,因此Java 9远未实现多继承。
Java 9版本中的接口可以拥有私有方法,但必须是静态私有方法。这个特性被引入是为了允许模块化方法。每个函数都应该只负责一个职责,而不是使用冗长的默认方法。与多重继承无关。
私有静态方法越多,您将能够编写更干净和可重复使用的代码。无论是公共还是受保护的静态方法都不能被覆盖。
抽象类:在抽象类中,我们可以声明实例变量,这些变量是子类所需的。
接口:在接口中,每个变量都是public static和final的,我们不能声明实例变量。
抽象类:抽象类可以讨论对象的状态。
接口:接口永远不能讨论对象的状态。
抽象类:在抽象类中,我们可以声明构造函数。
接口:在接口中,我们不能声明构造函数,因为构造函数的目的是初始化实例变量。如果我们不能在接口中有实例变量,那么有什么必要在那里使用构造函数呢?
抽象类:在抽象类中,我们可以声明实例和静态块。
接口:接口不能具有实例和静态块。
抽象类:抽象类无法引用lambda表达式。
接口:具有单个抽象方法的接口可以引用lambda表达式。
抽象类:在抽象类中,我们可以重写OBJECT CLASS方法。
接口:我们不能在接口中重写OBJECT CLASS方法。
我想说的是:
接口中的默认方法/静态方法概念只是为了节省实现类而不是提供有意义的有用实现。默认方法/静态方法是一种虚假实现,"如果您愿意,您可以使用它们,或者您可以覆盖它们(在默认方法的情况下,在实现类中)" 因此,每当在接口中添加新方法时,这样可以避免在实现类中实现新方法。 因此,接口永远无法等同于抽象类。
protected
的支持,package-private
的支持,基本上是除了private
和static
之外的所有内容.. 接口无法扩展类,保留关键词interface
和class
,两者存在的哲学/目的/原因... 可能还有其他差异。 - Dioxinprivate
方法,而这些方法显然不会影响其他类。 - Holger