Множествено наследяване на Java
Множествено наследяване на Java
"Диамантен проблем"
Множество наследяване и интерфейси
Композиция като спасение
Състав или наследство?
Да предположим, че имаме следния куп клас родител-дете:
Кодът по-горе се компилира и работи добре, но какво, ако ClassC е внедрен по различен начин:
Обърнете внимание, че методът test () вече съществува в наследения клас, но връща различен тип резултат. Сега ClassD, в случай че използвате IDE, няма да бъде компилиран. Ще бъдете посъветвани да промените типа на връщане в наследения клас или в суперкласа.
Сега нека си представим ситуация, при която има многостепенно наследяване на клас и суперкласът не е наличен за нашите промени. Сега, за да се отървем от грешката при компилацията, нямаме друга възможност освен да сменим подписа или името на метода на подкласа. Също така ще трябва да направим промени на всички места, където е бил извикан този метод. По този начин наследяването прави нашия код крехък.
Описаният по-горе проблем никога не възниква в случай на композиция и следователно прави последния за предпочитане пред наследяването.
Следващият проблем с наследяването е, че излагаме всички методи на родителя на клиента. И ако суперкласът не е проектиран много добре и съдържа дупки в сигурността. Тогава, въпреки факта, че се грижим изцяло за сигурността, когато изпълняваме нашия подклас, ние все още ще разчитаме на погрешното изпълнение на родителския клас.