Типичная проблема в ОО-программировании - проблема алмазов. У меня есть родительский класс A с двумя подклассами B и C. A имеет абстрактный метод, B и C реализуют его. Теперь у меня есть подкласс D, который наследует B и C. Теперь проблема с алмазом в том, какую реализацию использует D, одну из B или одну из C?
Люди утверждают, что в Java нет проблем с бриллиантами. У меня может быть только множественное наследование с интерфейсами, и поскольку у них нет реализации, у меня нет проблем с алмазом. Это правда? Я так не думаю. См. Ниже:
[пример снятого автомобиля]
Всегда ли проблема с бриллиантами является причиной плохого проектирования классов, и ее не нужно решать ни программисту, ни компилятору, потому что она вообще не должна существовать?
Обновление: возможно, мой пример был неудачно выбран.
Посмотри это изображение
(источник: suffolk.edu )
Конечно, вы можете сделать Person виртуальным в C ++, и, таким образом, у вас будет только один экземпляр person в памяти, но реальная проблема сохраняется IMHO. Как бы вы реализовали getDepartment () для GradTeachingFellow? Подумайте, он может быть студентом на одном факультете и преподавать на другом. Таким образом, вы можете вернуть либо один отдел, либо другой; не существует идеального решения проблемы, и тот факт, что ни одна реализация не может быть унаследована (например, ученик и учитель могут быть интерфейсами), кажется, не решает проблему для меня.