由于Java 9将允许我们在接口中定义private
和private static
方法,因此interface
和class
的剩余差异是什么?另外,Java是否正朝着多重继承缓慢发展?Java 9接口vs类
29
A
回答
35
Java 9中的私有接口方法的行为与其他私有方法完全相同:它们必须具有正文(即使在抽象类中),既不能被子类调用也不能被子类重写。因此,它们并不真正与继承进行交互。其中(特别是多重继承)的聊天,有(至少?)三种的它:
- 的类型继承意味着一个类型可以是另一种类型,例如
String
是Object
。 Java允许从第一天开始通过类型的多重继承(通过接口)。 - 行为的继承意味着一种类型可以继承另一种类型的行为。在Java 8之前,只有类可以实现方法,所以只有这种类型的单一继承。使用Java 8的默认方法,允许接口实现方法,从而为Java提供多重行为继承。
- 继承状态意味着一个类型继承另一个类型的内部状态(即字段)。就目前而言(Java 9和当前为未来的Java版本提出的一切),只有类可以具有状态,因此只有这种类型的单一继承。
正如你所看到的私人界面方法不会在这里添加任何东西。
关于如何比较接口和类的问题,有两个主要区别:多重继承和状态。接口支持前者,类可以具有后者。由于国家在典型的面向对象方面很重要,所以类仍然是相关的。
如果有一种方法让接口强制实现具有特定的非公有领域或者直接定义一个接口本身,则游戏会发生变化,接口可能会与类竞争。
27
私有方法不会被子类继承,所以此功能不会影响实现类。我相信接口中的私有方法允许我们在默认方法之间共享代码。
Java接口仍然不能有非静态成员。这是一个很大的差异,而不是多重继承IMO。
19
Java 9接口仍然不能包含字段和构造函数。这在类和接口之间产生了巨大的差异,所以Java 9远没有多重继承。
2
版本9中的Java接口具有私有方法,但具有静态私有方法。该功能已被引入以允许模块化方法。一个功能应该与一个责任一起工作,而不是使用冗长的缺省方法。它与多个继承无关。 更私有的静态方法,您将能够编写干净且可重用的代码的次数越多。无论如何,静态方法无论是public还是protected都不能被覆盖。
相关问题
- 1. Java接口VS类的返回类型
- 2. 接口:php vs java
- 3. Java类接口类
- 4. 接口vs类的实例
- 5. 接口vs 100%抽象类
- 6. java.util包 - 类vs接口
- 7. Class Vs抽象类与Vs接口
- 8. 性能对类装载VS Java接口中的接口加载的影响8
- 9. REST是API还是:REST vs Java接口?
- 10. 具体类vs接口:何时使用?
- 11. 结构VS类实现一个接口
- 12. 通用接口VS接口,用于每种类型的
- 13. 使用接口,2 Java类
- 14. java中的类型接口
- 15. java中的gui接口类?
- 16. Java ArrayList接口类型
- 17. Java本地类和接口
- 18. Java的铸造接口类
- 19. 接口和Java中的类
- 20. SKSpriteNode子类。的iOS 8.4 VS 9.x中
- 21. Java泛型:接受类或接口
- 22. java类和接口的类型
- 23. 类实例VS接口VS通用对象 - 性能
- 24. JNA直接vs接口映射?
- 25. Java 9中接口方法的默认访问修饰符?
- 26. Java-接口使用接口
- 27. java中的接口接口
- 28. Klocwork 9 vs Klocwork 12
- 29. 接口类与类
- 30. 接口建筑 - UIViews VS图片VS核芯显卡VS PDF子类
我很惊讶,有这么多upvotes ...剩余的区别:'protected'支持,'package-private'支持,**基本上除了'private'和'static' **外所有内容。接口不能扩展类,保留关键字'interface'和'class ',*两者的存在理念/目的/理由..可能继续下去.. –
@VinceEmigh我明白你的关注。但是在我职业生涯刚开始的时候有人告诉我:“没有问题是愚蠢的”。而且我知道所有包括你在内的人都会理解这一点。 – Aakash
答案仍然与[默认方法与Java 8中的抽象类的接口](https://stackoverflow.com/q/19998454/2711488)中的相同,只是在接口中可以有'private'方法,这显然不会对其他班级产生影响。 – Holger