Я нашел этот вопрос, который создает проблему при преобразовании с повышением, когда дочерний объект по-прежнему вызывает свои собственные реализации метода, даже если оно явно преобразовано с повышением до родительского. Поскольку код вводит поля в классы, но не детализирует их, я немного его изменил:
//...
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