У меня была дискуссия с коллегой, который настаивал на том, что в таких языках, как Java и С#, никогда не будет причин использовать базовый класс Pure Abstract, поскольку это просто означает, что вы не можете обойти отсутствие множественного наследования.
Я чувствую, что он ошибается в этом, так как я всегда думал, что если вещь является существительным, то это объект, и если это глагол, то это интерфейс.
Например, если бы я хотел определить тип Bird, где я хотел бы применить метод fly без его реализации, тогда я бы сделал это чистым абстрактным классом.
Если бы я хотел определить тип Flies, я бы сделал его интерфейсом с методом fly.
Bird может реализовать Flies.
Я не прав?
EDIT:
Единственный твердый аргумент, который я могу дать, чтобы поддержать мою точку зрения, состоит в том, что в какой-то момент в будущем дизайн может измениться, чтобы птицы могли есть. Если все птицы едят то же самое, то это нужно добавить к Bird, делая его не чистым абстрактным.
Если бы Bird был интерфейсом, это изменение было бы просто кошмаром, так как я не могу знать, реализуют ли вещи, которые наследуют какой-либо другой базовый класс, мой интерфейс Bird, поэтому я не могу просто реорганизовать свои проблемы.