Метод me
возвращает ссылку на фактический объект, который имеет тип Child
, но тип ссылки имеет тип Parent
.
Итак, у вас есть ссылка типа Parent
, которая указывает на объект типа Child
. Вы можете использовать это для доступа к любым членам, которые класс Child
наследует от класса Parent
. Чтобы получить доступ к членам класса Child
, необходимо привести ссылку на тип Child
:
Child c = (Child)someObject.me();
Вы можете заставить метод me
возвращать ссылку Child
и выполнять приведение внутри метода, но тогда, конечно, не получится вернуть ссылку на объект Parent
. Если вы не используете дженерики, у каждого метода может быть только один тип возвращаемого значения. Даже если вы переопределите метод в классе Child
, он все равно должен вернуть тот же тип данных, что и в классе Parent
.