Там нет наследства. Наследование - это отношение "есть" (Ну, иногда даже нет отношения "есть", как упомянуто в ссылке ниже). Куб - это не квадрат, а квадрат - это не куб.
Как бы вы построили, это зависит от того, как вы моделируете. Вы можете пойти с чем-то вроде куба, имеющего 6 квадратов (куба нет, у него 6 квадратов; композиция), или куб имеет размер стороны, как у квадрата. Но как только не будет "есть", наследование станет опасной зоной ...
Кроме того, в наследстве все, что является допустимым для базового класса, должно быть допустимым для производного . Это квадрат расширяет проблему прямоугольника . Например:
Предположим, что Cube наследует Square: Если у вашего Square есть метод changeArea (double area) и getSide (), то же самое должно быть возможно для Cube. Но это не так, поскольку площадь куба в 6 раз больше площади квадрата (у него 6 квадратов).
Предположим, что Square наследует куб: Если у вашего куба есть метод setVolume (двойной объем), ваш квадрат будет разбит, если у него нет объема
Наконец, если вы хотите использовать наследование, вы можете создать объект GeometryObjectWithEqualSides , тогда оба объекта могут наследовать его. :)