San*_*epy 5 java abstract-class interface
我知道 byteValue() 和 shortValue() 具有与其他抽象方法不同的实现,并且是在 JDK1.1 中添加的。如果它是一个接口,这是不可能的。但是当开发人员在编写 Number 类时,他们为什么要把它变成一个抽象类呢?仅仅是因为他们预计以后可能会添加更多方法吗?我只需要权威引用支持的答案。非常感谢大家抽出时间来查看我的问题并给出答案。
这里没有人知道设计者的想法,但是抽象类和接口用于不同的目的。
类(在 Java 中)以严格的层次结构进行继承,这种层次结构是一种可用于确保分离不相关的对象类的工具。当整个层次结构的核心功能相似时,类也更具逻辑性。
例如,对于抽象类Number,Letter不可能有一个兼具两者的类。通过接口,我们可以创建一个实现这两者的类,但这是没有意义的。
另一方面,接口通常用于以正式方式公开类的(通常)一小部分,以便仅使用接口中指定的功能的可重用逻辑可以使用它们。它们更常用于添加支持功能,例如Serializable、Comparable或Runnable。
一个例子,Printable并且Comparable将是可怕的抽象类,因为它使得不可能有一个Comparable对象也成为Printable。
因此,设计者可能特意选择创建Number一个抽象类,以确保只有一个类层次结构可以是数字,而不能是其他任何东西。也许它可以允许未来的优化,JDK 将这些类视为特殊情况,就像它对String.