java - 为什么 Java 中的 Number 类不是接口(interface)而不是抽象类?

标签 java interface abstract-class

<分区>

我知道 byteValue() 和 shortValue() 的实现与其他抽象方法不同,它们是在 JDK1.1 中添加的。如果它是一个接口(interface),这是不可能的。但是,当开发人员编写 Number 类时,为什么要将其设为抽象类?仅仅是因为他们预计以后可能会添加更多方法吗? 我只需要权威引用支持的答案。非常感谢大家花时间审阅我的问题并给出答案。

最佳答案

这里没有人知道设计者的想法是什么,但是抽象类和接口(interface)用于不同的目的。

类(在 Java 中)以严格的层次结构继承,这种层次结构是一种可用于确保分离不相关对象类的工具。当整个层次结构的核心功能相似时,类也更合乎逻辑。

例如,使用抽象类 NumberLetter 就不可能有一个同时是两者的类。使用接口(interface),可以创建一个实现两者的类,这毫无意义。

另一方面,接口(interface)通常用于以正式方式公开类的(通常)一小部分,以便仅使用接口(interface)中指定的功能的可重用逻辑可以使用它们。它们更常用于添加支持功能,例如 SerializableComparableRunnable

例如,PrintableComparable 将是糟糕的抽象类,因为它不可能让 Comparable 对象也成为 可打印

因此,设计者可能特别选择将 Number 设为抽象类,以确保只有一个类层次结构可以是数字,除此之外别无其他。或许它可以允许 JDK 将这些类视为特殊情况的 future 优化,就像它对 String 所做的那样。

关于java - 为什么 Java 中的 Number 类不是接口(interface)而不是抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42908234/

相关文章:

java - 在 Bluemix 推送通知中删除 Push.ALL

java - 如何在Android中使用内部布局?

javascript - Typescript - 如何处理两个接口(interface)之间的公共(public)属性?

python - 从抽象方法继承包装器

interface - 在 Haxe 中,当子类中未在 "abstract"父类(super class)中定义方法时,如何强制执行子类中的方法声明?

java - 使用 Java 编写 SSL 检查器

Xcode - 如何使主 Controller 和详细 Controller 同时显示?

python - 如何修复 Tkinter Python 中的 "TCL error"?使用 Jupyter Notebook 进行工作

c++ - 指向抽象类的指针数组

java - Hibernate 4.3(使用 Netbeans 的 JavaServer Faces)返回零行的表