Практичность апкастинга в JavaJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Практичность апкастинга в Java

Сообщение Anonymous »

Я нашел этот вопрос, который создает проблему при преобразовании с повышением, когда дочерний объект по-прежнему вызывает свои собственные реализации метода, даже если оно явно преобразовано с повышением до родительского. Поскольку код вводит поля в классы, но не детализирует их, я немного его изменил:
//...
RedApple red = new RedApple();
Apple apple = (Apple) red;
System.out.println(apple.type);
apple.setType();
System.out.println(apple.type);

Этот код выводит:
null
inside red-apple class
null

Похоже, что хотя бы один из конструкторов вызывается, поля объекта не инициализируются. Из-за этого у меня создается впечатление, что преобразованный объект ничего не помнит о своем состоянии, независимо от того, происходит ли он из родительского или дочернего класса.
Хотя я могу понять ответ Что касается исходного вопроса, я не понимаю, чем это может быть практически полезно. Если объект, подвергшийся преобразованию, не запоминает свои поля и может вызывать только свои собственные методы, но не методы родителя, которому он был преобразован, тогда какой смысл в преобразовании?
Конкретно в этом примере , похоже, что повышающее преобразование является отрицательным, и все эти проблемы можно решить просто:
RedApple apple = new RedApple();

null
inside red-apple class
redapple


Подробнее здесь: https://stackoverflow.com/questions/790 ... ng-in-java
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»