为什么Java的数字类不相互扩展?

时间:2014-11-12 02:15:06

标签: java inheritance numbers

在Java中,为什么内置数字类不会相互扩展?不应该长扩展Integer,它扩展了Short,扩展了Byte,Double扩展了Float?

一般来说,当有一个"是一个"关系。每个整数都是长的吗?我想是的。

我能想到的唯一可能的解释是溢出不会得到正确处理。例如,(byte)100 + (byte)100-112,而(short)100 + (short)100200。但是,似乎应该有比保留错误行为更好的理由。

3 个答案:

答案 0 :(得分:3)

因为没有什么可以继承的。列出的每种类型都是各自独立的实体。例如,继承不能用于将8位值“扩展”为32位值。他们共同拥有的任何东西都是从java.lang.Number继承的。

答案 1 :(得分:3)

你的问题可以通过两种不同的方式来解决:

如果我们在讨论原语,那么你就会向后倾斜。

但是,如果您询问IntegerDoubleLong等类别,那么所有数字之间都存在关联。

重要的是要指出,数字作为Java中的对象源于找到的Numberhere。在层次结构中将它们分解为没有多大意义,因为所有数字之间的方法基本相同,尽管它们占用的内存大小不同。

简而言之,Java中的层次结构是由类共享的关系(通常是方法)定义的,而不是它们在内存中占用的大小。

答案 2 :(得分:3)

如果"是"您可以考虑使用继承。两个类之间的关系 - 您可能有一个名为AccountSavingsAccount的班级的银行系统 - 而储蓄帐户是一个帐户。实际上,它意味着子类的任何对象也属于超类。

Integer(32位整数)和Long(64位整数)之间没有这种关系。 32位整数不是64位整数;和64位整数不是32位整数。因此,建议在Integer类和Long类之间存在继承关系是没有意义的。