为什么Java中的Number类是接口而不是Abstract类?

时间:2017-03-20 15:55:46

标签: java interface abstract-class

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

1 个答案:

答案 0 :(得分:1)

这里没有人会知道设计师的想法,但是抽象的类和接口被用于不同的目的。

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

例如,对于抽象类NumberLetter,不可能有一个同时具有的类。使用接口,可以创建一个实现两者的类,这是没有意义的。

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

例如,PrintableComparable会是一个糟糕的抽象类,因为这样就不可能让Comparable对象成为Printable

因此,设计人员可能已经明确选择使Number成为一个抽象类,以确保只有一个类层次结构可以是数字,而不是其他任何类。也许它可能允许将来优化JDK将这些类视为特殊情况,就像它对String一样。