Незважаючи на те, що програміст (спочатку, щонайменше, є нагодою мати багатократне успадковування), це майже тривіальний недолік, і вам слід (у більшості випадків) не покладатися на багаторазове успадкування. Причини цього складні, але якщо ви дійсно хочете дізнатися про це, врахуйте досвід двох найвідоміших (за індексом TIOBE ) мов програмування, які її підтримують: C ++ та Python (3-й та 8-й респектабельно).
У Python підтримується багатократне успадкування, але програмісти майже не розуміють загалом, і заявити, що ви знаєте, як це працює, означає прочитати та зрозуміти цю статтю на тему: Порядок вирішення методу . Щось інше, що трапляється в Python, - це те, що інтерфейси, начебто потрапили в мову - Zope.Interfaces.
Для C ++, google "алмазна ієрархія C ++", і ось потворність, яка ось-ось охопить вас. Професіонали C ++ знають, як використовувати множинне успадкування. Всі інші зазвичай просто розігруються, не знаючи, які будуть результати. Ще одна річ, яка показує, наскільки корисні інтерфейси, - це той факт, що у багатьох випадках класу може знадобитися повністю перекрити поведінку батьків. У таких випадках батьківська реалізація є непотрібною і лише обтяжує дочірній клас пам'яттю для приватних змінних батьків, які можуть не мати значення для віку C #, але мають значення, коли ви робите вбудоване програмування. Якщо ви використовуєте інтерфейс, ця проблема відсутня.
На закінчення, інтерфейси, на мій погляд, є істотною частиною ООП, оскільки вони виконують договір. Багаторазове успадкування корисно в обмежених випадках, і, як правило, тільки хлопцям, які вміють ним користуватися. Отже, якщо ви початківець, ви є тим, кого лікують через відсутність багаторазового успадкування - це дає кращі шанси не помилитися .
Крім того, історично склалося, що ідея інтерфейсу коріняється набагато раніше, ніж технічні характеристики C # Microsoft. Більшість людей вважають C # оновленням над Java (у більшості почуттів), і здогадуються, звідки C # отримав свої інтерфейси - Java. Протокол - це старше слово для тієї ж концепції, і воно набагато старше, ніж .NET.
Оновлення: Тепер я бачу, що, можливо, я відповів на інше питання - чому інтерфейси замість багаторазового успадкування, але це здавалося відповіддю, який ви шукали. Крім того, мова ОО повинна мати хоча б одну з двох, а інші відповіді охоплювали ваше первісне запитання.