在Java中,为什么内置数字类不会相互扩展?不应该长扩展Integer,它扩展了Short,扩展了Byte,Double扩展了Float?
一般来说,当有一个"是一个"关系。每个整数都是长的吗?我想是的。
我能想到的唯一可能的解释是溢出不会得到正确处理。例如,(byte)100 + (byte)100
为-112
,而(short)100 + (short)100
为200
。但是,似乎应该有比保留错误行为更好的理由。
答案 0 :(得分:3)
因为没有什么可以继承的。列出的每种类型都是各自独立的实体。例如,继承不能用于将8位值“扩展”为32位值。他们共同拥有的任何东西都是从java.lang.Number
继承的。
答案 1 :(得分:3)
你的问题可以通过两种不同的方式来解决:
如果我们在讨论原语,那么你就会向后倾斜。
但是,如果您询问Integer
,Double
,Long
等类别,那么所有数字之间都存在关联。
重要的是要指出,数字作为Java中的对象源于找到的Number
类here。在层次结构中将它们分解为没有多大意义,因为所有数字之间的方法基本相同,尽管它们占用的内存大小不同。
简而言之,Java中的层次结构是由类共享的关系(通常是方法)定义的,而不是它们在内存中占用的大小。
答案 2 :(得分:3)
如果"是"您可以考虑使用继承。两个类之间的关系 - 您可能有一个名为Account
和SavingsAccount
的班级的银行系统 - 而储蓄帐户是一个帐户。实际上,它意味着子类的任何对象也属于超类。
但Integer
(32位整数)和Long
(64位整数)之间没有这种关系。 32位整数不是64位整数;和64位整数不是32位整数。因此,建议在Integer
类和Long
类之间存在继承关系是没有意义的。