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