Вы не сможете преобразовать исходный объект в ExtendedClass
, потому что это , а не экземпляр этого класса. Существование подкласса не означает, что экземпляры суперкласса могут быть каким-либо образом приведены в эти подклассы. В этом случае ваш stdClass
объект является экземпляром только StandardClass
, поэтому он не может быть успешно понижен.
РЕДАКТИРОВАТЬ, чтобы уточнить: Конечно, некоторые объекты, хранящиеся в переменных StandardClass, вполне могут быть объектами ExtendedClass. Насколько я понимаю, вы не изменили фактический объект, сохраненный в запросе, просто создали подкласс. Когда вы сказали, что не можете выполнить приведение, я предположил, что вы имеете в виду, что приведение не удалось во время выполнения с ClassCastException
(некоторые преобразования будут отклонены компилятором, поскольку они не могут быть успешными, например, Integer
никогда не может быть приведен String
, но это не должно быть одним из таких случаев). Если вы создали подкласс , а изменили ваше приложение так, чтобы объект, сохраненный в запросе, был создан как объект ExtendedClass, тогда приведение должно завершиться успешно.
Чтобы достичь того, что вы хотите сделать, более чистый подход - это своего рода класс оболочки , который содержит a StandardClass
экземпляр и сам реализует методы Observer
. Затем он может вызывать соответствующие методы в StandardClass в ответ на наблюдаемые события.