为什么NumberClass有一个抽象方法intValue()、longValue()等,尽管Numbers应该返回int或long等?为什么他们还不能实现方法呢?
这是因为方法的实现依赖于底层子类。例如,由于处理浮点表示,您必须以不同于Integer
的方式确定BigDecimal
或Double
的intValue()
。因此,超类无法总结如何计算这些方法。
以下是Number
的直接已知子类:
AtomicInteger
、AtomicLong
、BigDecimal
、BigInteger
、Byte
、Double
、Float
、Integer
、Long
、Short
。
所以他们应该只决定什么应该是相应的int值。
BigDecimal
的整数转换逻辑肯定与Double
(或Byte
)的整数转换电路不同。
但是是的,它们都应该有一个相应的int值。因此Number
中的抽象方法
作为简单的OOPS概念,它们抽象出了更通用的特性,并为专门的类(Sub-classes)提供了选项,以提供更具体的实现。