Proč je vícenásobná dědičnost podporována v C++, ale ne v Javě?
Proč je vícenásobná dědičnost podporována v C++, ale ne v Javě?

Video: Proč je vícenásobná dědičnost podporována v C++, ale ne v Javě?

Video: Proč je vícenásobná dědičnost podporována v C++, ale ne v Javě?
Video: Why multiple inheritance not supported by java? #javainterview #multipleinheritance #inheritance 2024, Smět
Anonim

C++ , Common lisp a několik dalších jazyků podporuje vícenásobnou dědičnost zatímco Jáva ne Podpěra, podpora to. Jáva nedovoluje vícenásobné dědictví aby se předešlo nejasnostem, které to způsobuje. Jedním z příkladů takového problému je diamantový problém, který se vyskytuje v vícenásobné dědictví.

Proč tedy vícenásobná dědičnost není v Javě podporována?

Jáva podporuje vícenásobné dědictví pouze přes rozhraní. Třída může implementovat libovolný počet rozhraní, ale může rozšířit pouze jednu třídu. Vícenásobná dědičnost je ne podporováno, protože to vede k smrtelnému diamantovému problému. Vy nezískáte z rozhraní žádnou funkcionalitu.

Co je diamantový problém ve vícenásobné dědičnosti? diamantový problém “je nejednoznačnost, která může vzniknout v důsledku povolení vícenásobné dědictví . Je to vážné problém pro jazyky (jako C++), které umožňují vícenásobné dědictví státu. Na Javě však vícenásobné dědictví není povoleno pro třídy, pouze pro rozhraní, která neobsahují stav.

Podobně se lidé ptají, proč C++ podporuje vícenásobnou dědičnost, ale C# ne?

Vícenásobná dědičnost v C# C# nepodporuje vícenásobnou dědičnost , protože zdůvodnili to přidání vícenásobné dědictví přidalo příliš mnoho složitosti C# a zároveň poskytuje příliš malý užitek. v C# , třídy jsou povoleny pouze zdědit z jedné rodičovské třídy, která se nazývá single dědictví.

Jak C++ podporuje vícenásobnou dědičnost?

Na rozdíl od mnoha jiných objektově orientovaných programovacích jazyků, C++ umožňuje vícenásobné dědictví . Vícenásobná dědičnost umožňuje dětské třídě zdědit z více než jedné rodičovské třídy. Třídy zvířat a plazů zdědit z toho. Pouze třída Animal přepíše metodu breathe().