В java, повторение downcasting и upcasting стирает данные в подклассе? - PullRequest
0 голосов
/ 09 декабря 2018

Я понимаю, что апкастинг преобразует подкласс в суперкласс, в то время как обратное транслирование происходит противоположным образом.Однако, если предположить, что для подкласса и суперкласса существует разное количество типов данных, преобразование из подкласса -> суперкласса -> подкласса приводит к стиранию части данных, поскольку некоторые части данных внутри подкласса не включены в суперкласс?

, посколькуЯ знаю, что числа с плавающей запятой стираются, когда типы данных с плавающей запятой преобразуются в int в c ++, мне интересно, работает ли он таким же образом для класса в Java.

1 Ответ

0 голосов
/ 09 декабря 2018

В 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))
...