Практичность апкастинга в 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

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