Ajánlott, 2020

Szerkesztő Választása

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

Az interfész és az absztrakt osztály mindketten hozzájárulnak az „OUP” hiányos típusához. Néha szükségünk van egy szuperosztályra, hogy meghatározzuk a „mit tegyünk”, de nem „hogyan kell csinálni”, hogy hogyan kell végrehajtani a részt a származtatott osztály igényei szerint, az „ interfész ” megoldást kínál erre. Néha szükségünk van egy olyan szuperosztályosztályra, amely meghatároz egy olyan általánosított struktúrát, amelyet a származtatott osztályok és bizonyos meghatározott struktúrák valósíthatnak meg, amelyeket a származtatott osztályok hasznosíthatnak, az „ absztrakt osztály ” megoldást nyújt 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, és az absztrakt osztály részben hiányos.

Összehasonlító táblázat

Az összehasonlítás alapjaFelületAbsztrakt osztály
AlapvetőHa nem csak a megvalósítással kapcsolatos ismeretekkel rendelkezik, akkor az "Interfész" -et használja.Amikor részlegesen ismeri az „Elvont osztályok” alkalmazást.
MódAz interfész csak absztrakt módszereket tartalmaz.Az absztrakt osztály absztrakt módszereket és konkrét módszereket tartalmaz.
A módszerek hozzáférési módosítójaAz interfész módszerek mindig "nyilvános" és "absztrakt", még akkor is, ha nem nyilatkozunk. Ezért 100% -os, tiszta absztrakt osztálynak mondható.Nem kötelező, hogy az elvont osztályban a módszer nyilvános és absztrakt lesz. Konkrét módszerekkel is rendelkezhet.
Korlátozott módszerek módosításaEgy interfész módszer nem deklarálható az alábbi módosítókkal:
Nyilvános: magán és védett
Absztrakt: végleges, statikus, szinkronizált, natív, szigorú.
Az absztrakt osztályváltozó módosítóinak nincsenek korlátozásai.
A változók módosításaAz Interess változók számára engedélyezett Acess Modifier nyilvános, statikus és végleges, függetlenül attól, hogy nyilatkozunk-e vagy sem.Az elvont osztályban szereplő változóknak nem kell nyilvánosnak, statikusnak, véglegesnek lennie.
Korlátozott változók változókhozAz interfészváltozókat nem lehet magán, védett, átmeneti, illékony.Az absztrakt osztályváltozók módosítóinak nincs korlátozása.
A változók inicializálásaAz interfészváltozókat a nyilatkozat időpontjában kell inicializálni.Nem kötelező, hogy az absztrakt osztályváltozókat a nyilatkozat időpontjában inicializálni kell.
Példa és statikus blokkokA belső felületen nem lehet egy példányt vagy statikus blokkot bejelenteni.Az absztrakt osztály lehetővé teszi egy példány vagy statikus blokk belsejében.
ConstructorsA konstruktor belső felületét nem tudja bejelenteni.A konstruktort elvont osztályon belül lehet bejelenteni.

Az interfész meghatározása

A Java nem engedélyezi a többszörös öröklést. Ez azt jelenti, hogy egyetlen osztály nem egyszerre több osztályt örökölhet. Ennek oka egy példával magyarázható. Tételezzük fel, hogy két szülőosztályunk van: A és B, és egy származtatott C osztály. A származtatott C osztály örökli mind az A, mind a B osztályt. Most mindkettőnek van A és B osztálya (), akkor kérdés lesz a C osztályhoz, hogy melyik osztály által meghatározott () módszert kell örökölnie. A probléma megoldása „interfész”.

Az interfész egy tiszta absztrakt osztály. Az interfész létrehozásához használt kulcsszó „interfész”. Mivel a felületen belül minden módszer teljesen elvont. Az interfész csak azt határozza meg, amit egy osztálynak meg kell tennie, de nem határozza meg, hogyan csinálja. Csak azért, mert az interfészen belül bejelentett összes módszer elvont, nem hoz létre példányt egy interfészhez. A java-i „interfész” általános formája:

 access_specifier interfész interfész_neve {visszatérő típusú módszer-név1 (paraméter-lista); visszatérési típusú módszernév2 (paraméter-lista); típusú végleges varname1 = érték; típusú végleges varname2 = érték; // ... visszatérő típusú metódusnévN (paraméter-lista); típusú végleges-varnameN = érték; } 

A hozzáférési specifikátort nyilvánosságra hozzák, mert az osztályoknak végre kell hajtaniuk az interfészt.

C ++-ban nincs „Interface” fogalma. De a Java és a C # határozza meg a felületet.

Interfész Java-ban:

  • Az interfész változói alapértelmezés szerint mindig nyilvánosak, statikusak és véglegesek.
  • A változókat a nyilatkozat időpontjában kell inicializálni.
  • A változókat soha nem lehet magán, védett, átmeneti és illékonynak nyilvánítani.
  • Az interfész módszerei mindig nyilvánosak és elvontak, míg soha nem lehetnek magán, védett, végleges, statikus, szinkronizált, natív és szigorúak.
  • Nem adhat ki konstruktor belső felületet, mivel a konstruktor fő célja az osztályváltozók inicializálása, de az interfészváltozókban a deklaráció idején inicializálják.
  • Az interfész örökölhet más interfészeket, de az ilyen interfészt végrehajtó osztálynak végre kell hajtania az öröklött interfészek összes módját.
  • Egy osztály egyidejűleg több felületet is örökíthet, és az összes öröklött interfész összes módját végre kell hajtania.

Az interfész általános megvalósítási formája Java-ban:

 class class_name implementálja az Interface_name {// class-body} 

Egy felület örökölésére egy osztály kulcsszó „implementál” -ot használ, és az osztály minden örökölt felület által bejelentett módszert végrehajt.

Interfész C #:

A C # interfész majdnem hasonló a Java felülethez, kivéve:

  • A C # interfész nem jelez változókat.
  • A kezelőfelület neve egy fővárossal van ellátva, és egy kettőspont (:) jelzéssel öröklődik.

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

 class class_name: interface_name {// class-body} 

Az absztrakt osztály meghatározása

Egy osztályt, amely egy vagy több absztrakt módszert tartalmaz, elvont osztálynak nevezzük, és az osztályot elvontnak adják ki az „absztrakt” kulcsszó segítségével, amelyet az osztálynyilatkozat elején az „osztály” kulcsszó követ. Mivel az absztrakt osztály az absztrakt módszert tartalmazza, nem teljes típusnak minősül. Ezért nem hozhat létre absztrakt osztályú objektumokat. Ha egy osztály örökli egy absztrakt osztályt, akkor az absztrakt osztály minden elvont módját végre kell hajtania, ha nem, akkor azt is absztraktnak kell nyilvánítani. Az absztrakt attribútum öröklődik mindaddig, amíg az absztrakt módszerek teljes megvalósítása meg nem történik.

Az elvont osztály konkrét módszereket is tartalmazhat, amelyeket a származtatott osztály felhasználhat. De az absztrakt osztályban nem lehet absztrakt konstruktort vagy absztrakt statikus módszert kimondani. Az absztrakt osztály általános formája a Java-ban:

 absztrakt osztályosztálynév {elvont módszer_név1 (); absztrakt módszer_név2 (); : return_type method_name3 (paraméter_list) {// konkrét módszer} return_type method_name4 (paraméter_list) {// konkrét módszer}}; 

Az elvont osztály fogalma a Java és a C # egyaránt hasonló. Egy absztrakt osztály kissé eltér a C ++ -tól.

C ++-ban, ha az osztály legalább egy virtuális funkcióval rendelkezik, az osztály absztrakt osztálysá válik. Az „absztrakt” kulcsszó helyett a „virtuális” kulcsszó egy absztrakt módszer bejelentésére szolgál.

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

  1. Ha megvan a „szükséges” tudás, de nem a „hogyan kell végrehajtani”, akkor az interfészt kell használni. Másrészről, ha tudod, hogy mi szükséges és részlegesen tudja, hogyan valósítható meg, akkor használj egy absztrakt osztályt.
  2. Az interfésznek minden módszere absztrakt, de az elvont osztálynak van néhány absztrakt módszere és néhány konkrét módszere.
  3. Az interfészen belüli módszerek nyilvánosak és elvontak, ezért tiszta absztrakt osztálynak is nevezik. Másrészt, az elvont elveken belüli módszerek nem korlátozódnak csak nyilvános és elvontakra.
  4. Egy interfész módszer soha nem lehet privát, védett, végleges, statikus, szinkronizált, natív vagy szigorú. Másrészt, nincsenek korlátozások az elvont osztály módszereire.
  5. Egy interfész változói nyilvánosak és véglegesek, függetlenül attól, hogy deklaráljuk-e őket, vagy sem, míg az elvont osztály változóinak ilyen korlátozása nem csak nyilvános és végleges.
  6. Egy interfész változói soha nem lehetnek privát védett tranziens vagy illékonyak, míg az elvont osztályban a változókra nincs korlátozás.
  7. Az interfész változóját a deklaráció során inicializálni kell. Másrészről az elvont osztály változói bármikor inicializálhatók.
  8. Egy interfészen belül egy példányt vagy statikus blokkot nem lehet bejelenteni, de az absztrakt osztályon belül bejelenti a példányt vagy a statikus blokkot.
  9. Nem adhat meg egy konstruktort az interfészen belül, míg a konstruktort elvont osztályban határozhatja meg.

Következtetés:

Ha olyan alaposztályt kell létrehoznunk, amely egy általánosított módszert tartalmaz, amelyet a származtatott osztályok igényeik szerint valósíthatnak meg, akkor az interfész és az absztrakt osztály fogalma segít.

Top