Prečo je viacnásobná dedičnosť podporovaná v C++, ale nie v Jave?
Prečo je viacnásobná dedičnosť podporovaná v C++, ale nie v Jave?

Video: Prečo je viacnásobná dedičnosť podporovaná v C++, ale nie v Jave?

Video: Prečo je viacnásobná dedičnosť podporovaná v C++, ale nie v Jave?
Video: Jak jsem se "omylem" stal programátorem 2024, November
Anonim

C++ , Spoločný lisp a niekoľko ďalších jazykov podporuje viacnásobné dedičstvo zatiaľ čo java nie podpora to. Java nedovoľuje viacnásobné dedičstvo aby sa predišlo nejasnostiam, ktoré to spôsobuje. Jedným z príkladov takéhoto problému je diamantový problém, ktorý sa vyskytuje v viacnásobné dedičstvo.

Prečo teda v jazyku Java nie je podporovaná viacnásobná dedičnosť?

Java podporuje viacnásobné dedičstvo iba cez rozhrania. Trieda môže implementovať ľubovoľný počet rozhraní, ale môže rozšíriť iba jednu triedu. Viacnásobné dedičstvo je nie podporované, pretože vedie k smrteľnému diamantovému problému. vy nezískavate z rozhrania žiadne funkcie.

Tiež, čo je diamantový problém vo viacnásobnej dedičnosti? diamantový problém “je nejednoznačnosť, ktorá môže vzniknúť v dôsledku povolenia viacnásobné dedičstvo . Je to vážne problém pre jazyky (ako C++), ktoré umožňujú viacnásobné dedičstvo štátu. Na Jave však viacnásobné dedičstvo nie je povolený pre triedy, iba pre rozhrania, ktoré neobsahujú stav.

Podobne sa ľudia pýtajú, prečo C++ podporuje viacnásobnú dedičnosť, ale C# nie?

Viacnásobné dedičstvo v C# C# nepodporuje viacnásobnú dedičnosť , pretože zdôvodnili, že pridanie viacnásobné dedičstvo pridalo príliš veľa zložitosti C# pričom poskytuje príliš malý úžitok. In C# , triedy sú povolené len dediť z jednej rodičovskej triedy, ktorá sa nazýva single dedičstvo.

Ako C++ podporuje viacnásobnú dedičnosť?

Na rozdiel od mnohých iných objektovo orientovaných programovacích jazykov, C++ umožňuje viacnásobné dedičstvo . Viacnásobné dedičstvo umožňuje triede dieťaťa dediť z viac ako jednej rodičovskej triedy. Triedy zvierat a plazov dediť od toho. Iba trieda Animal prepíše metódu breathe().