И сразу продолжение предыдущего поста — "Постусловия не могут быть ослаблены в подклассе".
То есть подклассы должны выполнять все постусловия, которые определены в базовом классе. Постусловия проверяют состояние возвращаемого объекта на выходе из функции. Вот такой пример.
❌Условное выражение проверяющее результат является постусловием в базовом классе, а в наследнике его уже нет. Не делай так!
Сюда-же можно отнести и ковариантность, которая позволяет объявлять в методе дочернего класса типом возвращаемого значения подтип того типа (ШО?!), который возвращает родительский метод.
Короче, в данном примере, в методе
render() дочернего класса, JpgImage объявлен типом возвращаемого значения, который в свою очередь является подтипом Image, который возвращает метод родительского класса Renderer. ❗️Таким образом в дочернем классе мы сузили возвращаемое значение. Не ослабили. А усилили :)
Ставь 🍺, если понял о чем идёт речь или 🐒, если всё это сложно и "давай шото попроще уже".