Különbség a virtuális és az absztrakt között

Anonim

Virtuális vagy Absztrakt. Habár kisebb különbségek vannak a különböző nyelveken, mind a virtuális, mind az absztrakt kulcsszavak részleges végrehajtást jelentenek a résztvevő entitások számára.

absztrakt

Tipikusan az absztrakt osztályok (Absztrakt bázis osztályok) (ABC) nem instantiated (az osztály egy példányát nem lehet létrehozni). Tehát az absztrakt osztályok csak akkor értelmezhetőek, ha a programozási nyelv támogatja az öröklést (az alkategóriák létrehozásának képessége az osztály kiterjesztéséről). Az absztrakt osztályok általában absztrakt koncepciót vagy entitást jelentenek, részben vagy teljesen végrehajtva. Ezért az absztrakt osztályok olyan anyaosztályokként működnek, amelyekből származnak a gyermek osztályok, így a gyermekosztály megoszthatja a szülőosztály hiányos funkcióit, és kiegészítheti azokat. Az absztrakt osztályok tartalmazhatnak absztrakt módszereket. Az elvont osztályt kiterjesztő alosztályok végrehajthatják ezeket az (örökölt) absztrakt módszereket. Ha a gyermek osztály minden ilyen absztrakt módszert alkalmaz, akkor konkrét osztály. De ha nem így van, akkor a gyermek osztály is absztrakt osztály lesz. Ez azt jelenti, hogy amikor a programozó egy osztályt absztraktként jelölt ki, azt mondja, hogy az osztály hiányos lesz, és olyan elemekkel rendelkezik, amelyeket az örökölt alosztályoknak ki kell tölteniük. Ez egy jó módja annak, hogy két programozó között létrejöjjön egy szerződés, ami egyszerűsíti a szoftverfejlesztés során felmerülő feladatokat. A programozó, aki az öröklési kódot írja, pontosan követnie kell a metódus-definíciókat (de persze saját végrehajtását is). Java és C # esetén az absztrakt osztályokat és módszereket az Absztrakt kulcsszó használatával deklarálják.

Virtuális

A virtuális módszerek / függvények képesek arra, hogy egy öröklődő osztályban (ugyanazon aláírással ellátott függvényt használva) felülbírálják viselkedését. A virtuális funkció koncepciója a következő forgatókönyvben fontos. Tegyük fel, hogy egy osztály egy gyermek osztályból származik, akkor minden esetben, amikor a származtatott osztály egy objektumát használják, az alap osztály vagy a származtatott osztály objektumára hivatkozhat. De a metódus-hívás viselkedése kétértelmű lehet, ha az alap-osztály módszereit felülírják. Ezért a kétértelműség megoldása érdekében virtuális kulcsszót használnak. Ha a módszer a virtuális jelzéssel van ellátva, akkor a származtatott osztály funkcióját (ha van ilyen) hívják, vagy pedig az alaposztály funkcióját hívják. Például a C ++-ban a virtuális kulcsszót pontosan erre a célra használják. A C #-ben a virtuális kulcsszó hasonló módon használatos, de a kulcsszó-felülbírálást az összes felülbírált módszer módosítására is használni kell.De a Java-ban nincs explicit virtuális kulcsszó. Minden nem statikus módszert virtuálisnak tekintünk. A testtel nem rendelkező virtuális funkciókat Pure Virtual funkciónak hívják. Java és C # esetében az absztrakt módszerek valójában Pure Virtual.

A virtuális és az absztrakt közötti különbség

Habár az absztrakt és a virtuális két kulcsszó / koncepció, amelyek hiányos végrehajtást jelentenek a hozzájuk tartozó entitásoknak, különbségeik vannak. Az absztrakt módszerek (amelyeket absztrakt osztályokon belül kell meghatározni) egyáltalán nem valósulnak meg, míg a virtuális módszerek megvalósulhatnak. Ha az absztrakt módszereket egy konkrét osztályra kiterjesztjük, akkor minden örökölt absztrakt módszert végre kell hajtani, míg az örökölt virtuális módszereket felül lehet fejezni.