В Java, почему не встроенные классы номеров расширяют друг друга? Должен ли Long Long Integer расширять Short, который расширяет байт, а Double - Float?Почему классы классов Java не расширяют друг друга?
В общем, наследование часто используется, когда есть отношение «есть». Так что каждый Integer длинный? Я думаю так.
Единственное возможное объяснение, о котором я могу думать, это то, что переполнение не будет обрабатываться правильно. Например, (byte)100 + (byte)100
- -112
, тогда как (short)100 + (short)100
- 200
. Однако кажется, что должна быть лучшая причина, чем сохранение поведения с ошибкой.
«И есть ли каждый целочисленный длинный?» - нет, 'long' в два раза больше в памяти. – August
@August Но это деталь реализации, которая, конечно же, может быть разной. – Ypnypn
Основываясь на [принципе взаимозаменяемости] (http://en.wikipedia.org/wiki/Liskov_substitution_principle), ваши отношения обратные. 'Integer' должен расширять' Long', так как вы всегда можете указать 'Integer', когда его запрашивают' Long', но не наоборот, поскольку некоторые значения 'Long' недопустимы для значений Integer. – DaoWen