Это считается правильным апкастингом?
Derived d = new Derived();
Base b = d; // Always OK.
Зачем кому-то повышать? Когда? Причина в том, что мы должны превратить объект в базовый класс, чтобы он не обладал функциональностью производного класса?
Как этот код выглядит в памяти? Производный класс создает экземпляры, и для этого объекта создается память. Затем создается объект базового класса, который теперь ссылается на d
.