A Java és C interfész és absztrakt osztály közötti különbség #

Szerző: Laura McKinney
A Teremtés Dátuma: 1 Április 2021
Frissítés Dátuma: 11 Lehet 2024
Anonim
A Java és C interfész és absztrakt osztály közötti különbség # - Technológia
A Java és C interfész és absztrakt osztály közötti különbség # - Technológia

Tartalom


Az interfész és az abszolút osztály egyaránt hozzájárul az OOP „hiányos típusához”. Időnként szükség van egy szuperosztályra a „mit kell csinálni” meghatározásához, de nem „hogyan kell csinálni”, hanem azt, hogy hogyan kell csinálni, a származtatott osztály végrehajtja az igénye szerint.felület”Kínál megoldást erre. Időnként szükségünk van egy szuperosztályú osztályra, amely meghatározza egy általánosított struktúrát, amely származtatott osztályokkal valósítható meg, és valamilyen meghatározott struktúrát, amelyet a származtatott osztályok használhatnak:absztrakt osztály”Megoldást kínál erre. Az interfész és az absztrakt osztály közötti alapvető különbség az, hogy az interfész teljesen hiányos, az absztrakt osztály részben hiányos.


  1. Összehasonlító táblázat
  2. Meghatározás
  3. Főbb különbségek
  4. Következtetés

Összehasonlító táblázat

Az összehasonlítás alapjaFelületAbsztrakt osztály
AlapvetőHa csak ismeri a követelményeket, nem pedig a megvalósítását, akkor használja az "Interfész" -t.Amikor részlegesen tudomást szerez a megvalósításokról, akkor az "Absztrakt osztályokat" használja.
MódAz interfész csak absztrakt módszereket tartalmaz.Az absztrakt osztály absztrakt és konkrét módszereket tartalmaz.
A módszerek hozzáférési módosítójaAz interfész módszerei mindig "nyilvános" és "absztrakt", akkor is, ha nem deklaráljuk. Ezért azt mondhatjuk, hogy 100% -ban tiszta absztrakt osztály.Nem kötelező, hogy az absztrakt osztályban alkalmazott módszer nyilvános és elvont. Konkrét módszerekkel is rendelkezhet.
Korlátozott módszerek módosítójaAz interfész módszer nem deklarálható a következő módosítókkal:
Nyilvános: magán és védett
Kivonat: végleges, statikus, szinkronizált, natív, szigorú.
Az absztrakt osztályváltozó módosítóira nincs korlátozás.
Hozzáférés a változók módosítójáhozAz interfész változók számára engedélyezett hozzáférés-módosító nyilvános, statikus és végleges, függetlenül attól, hogy deklarálunk-e vagy sem.Az absztrakt osztály változóinak nem kell nyilvánosnak, statikusnak és véglegesnek lennie.
Korlátozott módosítók a változókhozAz interfész változók nem nyilváníthatók privátnak, védettnek, tranziensnek, illékonynak.Az absztrakt osztályváltozók módosítóira nincs korlátozás.
A változók inicializálásaAz interfész változóit a deklarációkor inicializálni kell.Nem kötelező, hogy az elvont osztályváltozókat inicializálni kell a bejelentéskor.
Példány és statikus blokkokA belső felületen nem lehet deklarálni egy példányt vagy statikus blokkot.Az absztrakt osztály lehetővé teszi egy példány vagy statikus blokk belsejét.
ConstructorsNem tudja bejelenteni, hogy a konstruktor a felületen belül van.Bejelentheti a kivitelezőt egy absztrakt osztályon belül.


Az interfész meghatározása

A Java nem engedélyezi a többszörös öröklést. Vagyis egy osztály nem képes egynél több osztályt örökölni. Ennek oka egy példával magyarázható. Tegyük fel, hogy van két szülőosztályunk, A és B, valamint egy származtatott C osztályunk. A származtatott C osztály mind az A, mind a B osztályt örököli.Most mindkettőnek az A és B osztályba tartozik a metóduskészlet (), akkor a C osztály számára kérdés lesz, hogy melyik osztálykészlet () módszert kell örökölnie. A probléma megoldása az „interfész”.

Az interfész tiszta absztrakt osztály. Az interfész létrehozásához használt kulcsszó az „interfész”. Mivel az interfészen belüli összes módszer teljesen elvont. A felület csak azt határozza meg, hogy az osztálynak mit kell tennie, de nem határozza meg, hogyan teszi. Csak azért, mert a felületen belül deklarált összes módszer elvont, az interfész számára nem hoz létre példányt. A java „felületének” általános formája:

access_specifier felület interfész_neve {visszatérés típusú módszer-név1 (paraméter-lista); visszatérés típusú metódus-név2 (paraméter-lista); type final-varname1 = érték; type final-varname2 = érték; // ... visszatérés típusú metódusnévN (paraméterlista); type final-varnameN = érték; }

A hozzáférés-meghatározót nyilvánosnak nyilvánítják, mert az osztályoknak végre kell hajtaniuk a felületet.

A C ++-ban nincs az „interfész” fogalma. De a Java és a C # nagyon jól definiálja az interfészt.

Interfész Java nyelven:

  • Az interfész változói alapértelmezés szerint mindig nyilvános, statikus és végleges.
  • A változókat a nyilatkozat benyújtásakor kell inicializálni.
  • A változókat soha nem lehet magánjellegűnek védettnek, átmenetinek és illékonynak nyilvánítani.
  • Az interfészek módszerei mindig nyilvánosak és elvontak, míg soha nem nyilváníthatók privátnak, védettnek, véglegesnek, statikusnak, szinkronizáltnak, natívnak és szigorúnak.
  • Nem deklarálhat egyetlen konstruktort sem az interfészen belül, mivel a konstruktor fő célja az osztályváltozók inicializálása, de az interfészben a változókat a deklarálásakor inicializálják.
  • Az interfész más interfészeket is örökölhet, de az ilyen interfészt megvalósító osztálynak végre kell hajtania az örökölt interfészek összes módszerét.
  • Az osztály egyszerre több interfészt is örökölhet, és az örökölt interfészek összes módszerét végre kell hajtania.

A felhasználói felület Java alkalmazásban történő megvalósításának általános formája:

osztály osztály_név megvalósítja felület_nevet {// osztály-test}

Az interfész öröklésére az osztály egy „eszköz” kulcsszót használ, és az osztály végrehajtja az örökölt interfész által deklarált összes módszert.

Interfész a C # -ben:

A C # felület majdnem hasonló a Java felületéhez, kivéve:

  • A C # felület nem deklarálja a változókat.
  • Az interfész nevének előtagja egy nagybetű, és egy kettőspont (:) jelöléssel örökölhető.

A C # interfész megvalósításának általános formája:

osztály osztály_neve: felület_neve {// osztály-test}

Az absztrakt osztály meghatározása

Egy olyan osztályt, amely egy vagy több elvont módszert tartalmaz, elvont osztálynak nevezzük, és az osztály elvontnak nyilvánul az „elvont” kulcsszó használatával, amelyet az osztály deklaráció elején az „osztály” kulcsszó előz meg. Mivel az absztrakt osztály tartalmazza az absztrakt módszert, nem teljes típusnak minősül. Ezért nem hozhat létre absztrakt osztály objektumait. Ha egy osztály örökli egy absztrakt osztályt, akkor végre kell hajtania az absztrakt osztály összes absztrakt módszerét, ha nem, akkor azt is elvontnak kell nyilvánítania. Az absztrakt tulajdonságot addig örökölnek, amíg az absztrakt módszerek teljes megvalósítását el nem érik.

Az absztrakt osztály tartalmazhat konkrét módszereket is, amelyeket a származtatott osztály a jelenlegi formában felhasználhat. De nem deklarálhat absztrakt konstruktort vagy absztrakt statikus módszert egy absztrakt osztályon belül. A Java elvont osztály általános formája a következő:

elvont osztály osztály_neve {absztrakt módszer_név1 (); elvont módszer_neve2 (); : return_type módszer_neve3 (paraméter_lista) {// konkrét módszer} return_type módszer_neve4 (paraméter_lista) {// konkrét módszer}};

Az absztrakt osztály fogalma hasonló a Java és a C # esetében is. Az absztrakt osztály kissé eltér a C ++ kategóriában.

A C ++ esetén, ha az osztálynak legalább egy virtuális funkciója van, akkor az osztály elvont osztálytá válik. Az „elvont” kulcsszó helyett a „virtuális” kulcsszó szolgál egy elvont módszer deklarálására.

  1. Ha ismeri „mi szükséges”, de nem „hogyan valósulna meg”, akkor felületet kell használni. Másrészt, ha tudja, mi szükséges, és részben tudja, hogyan valósulna meg, akkor használjon absztrakt osztályt.
  2. Az interfész minden módszerét elválasztja, de egy absztrakt osztálynak vannak absztrakt módszerei és néhány konkrét módszerei.
  3. Az interfészen belüli módszerek nyilvánosak és elvontak, ezért tiszta absztrakt osztálynak is hívják. Másrészt az absztrakton belüli módszerek nem korlátozódnak csupán a nyilvános és csak az elvont módszerekre.
  4. Az interfész módszer soha nem lehet privát, védett, végleges, statikus, szinkronizált, natív vagy griežos. Másrészt nincs korlátozás az absztrakt osztály módszereire.
  5. Az interfész változói nyilvánosak és véglegesek, függetlenül attól, hogy deklaráljuk őket, vagy sem, míg az absztrakt osztály változóira nem vonatkoznak ilyen korlátozások, hogy csak nyilvánosak és véglegesek legyenek.
  6. Az interfész változói soha nem lehetnek magánvédett tranziens vagy ingatagok, míg az absztrakt osztályban a változókra nincs korlátozás.
  7. Az interfész változóját inicializálni kell a deklaráció során. Másrészt az absztrakt osztályban szereplő változók bármikor inicializálhatók.
  8. Egy interfészen belül nem lehet deklarálni egy példányt vagy statikus blokkot, de deklarálhat egy példányt vagy statikus blokkot egy absztrakt osztályon belül.
  9. Nem határozhat meg konstruktort egy interfészen belül, míg definiálhatja a konstruktort egy absztrakt osztályon belül.

Következtetés:

Ha létre kell hoznia egy olyan alaposztályt, amely egy általánosított módszert tartalmaz, amely a származtatott osztályok által igényük szerint megvalósítható, az interfész és az absztrakt osztály fogalma segít abban.