Можно ли объединять два класса в общий производный?
Изучаю ООП, конкретно сейчас - наследование. Общую концепцию вкурил, но вопрос по практическому применению.
Допустим, есть базовый класс - Человек. У него есть два производных - водитель и военный.
Суть вопроса : можно ли объединять два таких подкласса, внутри суперкласса? Реализуемо ли это на языке C# и если да, то насколько ( если вообще ) это усложнит дальнейшую поддержку?
Сам спросил, сам ответил.
Да, в теории можно. Это называется множественным наследованием.
Множественное наследование — потенциальный источник ошибок, которые могут возникнуть из-за наличия одинаковых имён методов в предках. В языках, которые позиционируются как наследники C++ (Java, C# и другие), от множественного наследования было решено отказаться в пользу интерфейсов.
У вас описана еще более сложная ситуация, чем "простое" множественное наследование: у вас ромбовидное наследование. Это когда классы предки сами наследуются от одного класса. Это порождает дополнительные проблемы и, в принципе, если такая ситуация возникает, есть смысл пересмотреть архитектуру наследования.
В вашем случае, возможно, лучший вариант наследование заменить агрегированием. Тогда в классе человек вы можете организовать вектор классов профессия и ваш человек сможет обладать несколькими профессиями.