Понимание типа возвращаемого значения переопределенных методов в объектно-ориентированном программировании