В java, повторение downcasting и upcasting стирает данные в подклассе?
Я понимаю, что апскейтинг конвертирует подкласс в суперкласс, в то время как обратное преобразование происходит наоборот Однако, если предположить, что для подкласса и суперкласса существует разное количество типов данных, делает ли преобразование из подкласса -> суперкласса -> подкласса удаление части данных, поскольку некоторые части данных внутри подкласса не включены в суперкласс?
Поскольку я знаю, что числа с плавающей запятой стираются, когда типы данных с плавающей запятой преобразуются в int в C++, мне интересно, работает ли он таким же образом для класса в Java.
1 ответ
В Java типы объектов являются ссылочными типами, это означает, что выражение никогда не вычисляется для объекта, а только для ссылки на объект.
В результате, повышение и понижение вообще не касаются объекта; они просто дают вам ссылки на объекты разных типов.
То есть этот код Java:
(Subclass)((Superclass) instanceOfSubclass)
примерно аналогичен этому коду C++:
dynamic_cast<subclass &>(static_cast<superclass &>(instance_of_subclass))
Однако, если вы делаете преобразования с типами значений, такими как int
а также float
тогда вы действительно можете потерять данные; этот код Java:
(double)((int) 3.5)
оценивает 3
а не 3.5
потому что преобразование в тип int
отбрасывается дробная часть стоимости. Это аналогично следующему коду C++:
static_cast<double>(static_cast<int>(3.5))