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