В 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))
Другие вопросы по тегам