我知道byteValue()和shortValue()具有与其他抽象方法不同的实现,并在JDK1.1中添加。如果它是一个接口,这是不可能的。但是当开发人员编写Number类时,为什么他们将它作为一个抽象类呢?是不是因为他们预计他们可能会在以后添加更多方法? 我只需要权威引用支持的答案。非常感谢大家在审查我的问题并给出答案的时候。
答案 0 :(得分:1)
这里没有人会知道设计师的想法,但是抽象的类和接口被用于不同的目的。
类(在Java中)继承在严格的层次结构中,并且此层次结构是一种可用于确保分离不相关的对象类的工具。当整个层次结构的核心功能相似时,类也更符合逻辑。
例如,对于抽象类Number
和Letter
,不可能有一个同时具有的类。使用接口,可以创建一个实现两者的类,这是没有意义的。
另一方面,接口通常用于以正式方式公开(通常)一小部分类,因此它们可以由仅使用接口中指定的功能的可重用逻辑使用。它们更常用于添加支持功能,例如Serializable
,Comparable
或Runnable
。
例如,Printable
和Comparable
会是一个糟糕的抽象类,因为这样就不可能让Comparable
对象成为Printable
。
因此,设计人员可能已经明确选择使Number
成为一个抽象类,以确保只有一个类层次结构可以是数字,而不是其他任何类。也许它可能允许将来优化JDK将这些类视为特殊情况,就像它对String
一样。