Ковариантные типы возвращаемых данных помогают избежать приведения типов в иерархии классов следующим образом: позволяют переопределять метод и объявлять более производный тип возвращаемого значения, чем у переопределённого метода. 2
При этом в более производных типах нужно предоставлять тип возврата, который по крайней мере так же специфичен, как и у переопределений в базовых типах. 2 Вызывающие метод или свойство статически получают более точный тип возвращаемого значения при вызове. 2
Таким образом, ковариантность позволяет избежать опускания и динамического контроля типов, так как вызывающий код не может предоставить объект менее определённого типа, чем ожидает код приёма. 3
Например, в C++ ковариантная поддержка помогает гарантировать правильный динамический тип объекта благодаря статической проверке типа. 3