Hvorfor multipel nedarvning er understøttet i C++, men ikke i Java?
Hvorfor multipel nedarvning er understøttet i C++, men ikke i Java?

Video: Hvorfor multipel nedarvning er understøttet i C++, men ikke i Java?

Video: Hvorfor multipel nedarvning er understøttet i C++, men ikke i Java?
Video: Distributed Microservices with Dapr | #CloudNativeNinja PT2 2024, Kan
Anonim

C++ , Almindelig lisp og få andre sprog understøtter multipel arv mens java gør ikke support det. Java tillader ikke multipel arv for at undgå tvetydigheden forårsaget af det. Et af eksemplerne på et sådant problem er diamantproblemet, der opstår i multipel arv.

Derfor, hvorfor multipel nedarvning ikke understøttes i Java?

Java bakker op multipel arv kun gennem grænseflader. En klasse kan implementere et hvilket som helst antal grænseflader, men kan kun udvide én klasse. Multipel arv er ikke understøttet, fordi det fører til dødbringende diamantproblem. Du får ikke nogen funktionalitet fra grænsefladen.

Og hvad er diamantproblemet i multipel arv? Det diamant problem ” er en uklarhed, der kan opstå som en konsekvens af at tillade multipel arv . Det er en alvorlig problem for sprog (som C++), der giver mulighed for multipel arv af staten. I Java, men multipel arv er ikke tilladt for klasser, kun for grænseflader, og disse indeholder ikke tilstand.

På samme måde spørger folk, hvorfor C++ understøtter multiple arv, men C# gør det ikke?

Multipel arv i C# C# understøtter ikke multipel nedarvning , fordi de ræsonnerede, at tilføje multipel arv tilføjet for meget kompleksitet C# samtidig med at det giver for lidt udbytte. I C# , har klasserne kun lov til arve fra en enlig forældreklasse, som kaldes single arv.

Hvordan understøtter C++ multipel nedarvning?

I modsætning til mange andre objektorienterede programmeringssprog, C++ tillader multipel arv . Multipel arv giver en børneklasse mulighed for arve fra mere end én forældreklasse. Dyre- og krybdyrklasserne arve fra det. Kun klassen Animal tilsidesætter metoden breathe().