Краткий ответ
Да, абсолютно верно․ Большинство прямоугольников не являются квадратами․
Разберёмся по полочкам
Что такое прямоугольник?
Прямоугольник — это четырёхугольник, у которого все углы прямые (90°)․
Достаточно выполнения одного из двух условий:
- все четыре угла равны 90°, или
- это параллелограмм с равными диагоналями․
Что такое квадрат?
Квадрат — это частный случай прямоугольника, у которого дополнительно все стороны равны․
- 4 прямых угла (как у любого прямоугольника)․
- 4 равные стороны (отличие от «обычного» прямоугольника)․
Венн-диаграмма «Прямоугольник ⭢ Квадрат»
На интуитивном рисунке:
- Большой круг «Прямоугольники»․
- Внутри него маленький кружок «Квадраты»․
Это означает: каждый квадрат — прямоугольник, но не каждый прямоугольник — квадрат․
Контрпримеры
Возьмём прямоугольник со сторонами 3 см и 5 см:
- Все углы — 90° ⇒ это прямоугольник․
- Стороны 3 ≠ 5 ⇒ это не квадрат․
Значит, мы нашли прямоугольник, который не является квадратом․ Следовательно, утверждение «бывают прямоугольники, не являющиеся квадратами» верно․
Как это связано с ООП?
Иногда в учебниках приводят «контравariant» пример:
class Rectangle {
double a, b;
double area { return a*b; }
}
class Square extends Rectangle {
// плохо: наследник ограничивает свободу родителя
}
Это антипаттерн наследования, потому что класс-наследник жёстко фиксирует a == b, ломая подстановочный принцип (LSP)․ Геометрически же квадрат является прямоугольником, но в ООП необходимо разделять «is-a» и «has-a»․
Да, бывают прямоугольники, которые не являются квадратами․ Это основа геометрии пятого класса и прекрасный повод проверять, действительно ли ваши «квадратные» объекты в коде не ломают принципы SOLID․