Priporočena, 2024

Izbira Urednika

Razlika med vmesnikom in abstraktnim razredom v Javi in ​​C #

Vmesnik in abstraktni razred prispevata k "nepopolnemu tipu" v OOP. Včasih potrebujemo superrazred, da definiramo "kaj storiti", vendar ne "kako narediti", temveč, kako narediti del, ki ga izvede izpeljani razred glede na njegovo potrebo, " vmesnik " zagotavlja rešitev za to. Včasih potrebujemo razred nadrazreda, ki definira neko posplošeno strukturo, ki jo lahko izvedemo iz izpeljanih razredov in nekatere določene strukture, ki jih lahko uporabijo izpeljani razredi, » abstraktni razred « pa nudi rešitev za to. Temeljna razlika med vmesnikom in abstraktnim razredom je, da je vmesnik popolnoma nepopoln, abstraktni razred pa je delno nepopoln.

Primerjalna tabela

Podlaga za primerjavoVmesnikAbstraktni razred
OsnovnoKo poznate samo zahteve, ki ne zadevajo njegovega izvajanja, uporabite "Vmesnik".Ko delno veste o izvedbah, uporabite "Abstraktni razredi".
MetodeVmesnik vsebuje le abstraktne metode.Abstraktni razred vsebuje abstraktne metode in konkretne metode.
Modifikator dostopa za metodeMetode vmesnika so vedno "javne" in "abstraktne", tudi če jih ne prijavimo. Zato lahko rečemo, da je to 100% čisti abstraktni razred.Ni obvezno, da bo metoda v abstraktnem razredu javna in abstraktna. Lahko ima tudi konkretne metode.
Omejeni modifikator za metodeMetode vmesnika ni mogoče prijaviti z naslednjimi modifikatorji:
Javno: zasebno in zaščiteno
Povzetek: končna, statična, sinhronizirana, domača, strog.
Ni omejitev za modifikatorje abstraktne spremenljivke razreda.
Modifikator spremenljivk za dostopDopustni modifikator dostopa za spremenljivke vmesnika so javni, statični in končni, ali se prijavljamo ali ne.Spremenljivke v abstraktnem razredu ne smejo biti javne, statične, končne.
Omejeni modifikatorji za spremenljivkeVmesniških spremenljivk ni mogoče razglasiti za zasebne, zaščitene, prehodne, spremenljive.Ni omejitev za modifikatorje abstraktnih spremenljivk razreda.
Inicializacija spremenljivkSpremenljivke vmesnika je treba inicializirati v času njegove deklaracije.Ni nujno, da je treba abstraktne spremenljivke razreda inicializirati v času njegove izjave.
Primerki in statični blokiZnotraj vmesnika ne morete razglasiti primera ali statičnega bloka.Abstraktni razred omogoča primerek ali statični blok znotraj njega.
KonstruktorjiVmesnika konstruktorja ne morete razglasiti.Konstruktor lahko razglasite znotraj abstraktnega razreda.

Opredelitev vmesnika

Java ne dovoljuje več dedovanja. To pomeni, da en razred ne more podedovati več kot en razred naenkrat. Razlog za to lahko pojasnimo s primerom. Predpostavimo, da imamo dva nadrejena razreda, A in B in izpeljani razred C. Izvedeni razred C podeduje oba razreda A in B. Tako imata oba razreda A in B nabor metod (), potem je vprašanje za razred C, katera metoda razreda () (ali) ga mora podedovati. Rešitev tega problema je »vmesnik«.

Vmesnik je čisti abstraktni razred. Ključna beseda, uporabljena za ustvarjanje vmesnika, je »vmesnik«. Ker je vsa metoda znotraj vmesnika popolnoma abstraktna. Vmesnik določa samo, kaj mora razred početi, vendar ne določa, kako to počne. Samo zato, ker so vse metode, deklarirane znotraj vmesnika, abstraktne, za vmesnik ni ustvarjen noben primer. Splošna oblika "vmesnika" v javi je:

 access_specifier vmesnik ime_vmesnika {vrnitvena-metoda-ime1 (seznam parametrov); return-type method-name2 (seznam parametrov); tip final-varname1 = vrednost; tip final-varname2 = vrednost; // ... vrnejo metodo-imeN (seznam parametrov); tip final-varnameN = vrednost; } 

Specifikator dostopa je razglašen za javnega, ker morajo razreda uvesti vmesnik.

V C ++ nimamo koncepta "Interface". Vendar pa Java in C # zelo dobro določata vmesnik.

Vmesnik v Javi:

  • Spremenljivke vmesnika so privzeto vedno javne, statične in končne.
  • Spremenljivke je treba inicializirati ob njeni izjavi.
  • Spremenljivke nikoli ne moremo razglasiti za zasebne, zaščitene, prehodne in volatilne.
  • Metode vmesnika so vedno javne in abstraktne, medtem ko jih nikoli ne moremo razglasiti za zasebne, zaščitene, končne, statične, sinhronizirane, domače in stroge.
  • Ne morete razglasiti nobenega konstruktorja znotraj vmesnika, saj je glavni namen konstruktorja inicializacija spremenljivk razreda, vendar se v vmesniških spremenljivkah inicializirajo v času njegove deklaracije.
  • Vmesnik lahko podeduje druge vmesnike, vendar mora razred, ki izvaja tak vmesnik, uporabiti metode vseh podedovanih vmesnikov.
  • Razred lahko podeduje več kot en vmesnik naenkrat in mora izvajati vse metode vseh podedovanih vmesnikov.

Splošna oblika izvajanja vmesnika v Javi:

 class class_name implementira ime_vmesnika {// class-body} 

Za podedovanje vmesnika razred uporablja ključno besedo »implementira« in razred izvaja vse metode, ki jih deklarira podedovani vmesnik.

Vmesnik v C #:

Vmesnik v C # je skoraj podoben vmesniku v Javi, razen:

  • Vmesnik v C # ne deklarira spremenljivk.
  • Ime vmesnika je označeno z glavno črko I in je podedovano z dvopičjem (:).

Splošna oblika izvajanja vmesnika v C #:

 class class_name: ime_vmesnika {// class-body} 

Opredelitev abstraktnega razreda

Razred, ki vsebuje eno ali več abstraktnih metod, se imenuje abstraktni razred, razred pa je razglašen kot abstrakten z uporabo ključne besede „abstrakt“, pred katero je na začetku deklaracije razreda beseda »class«. Ker abstraktni razred vsebuje abstraktno metodo, predstavlja nepopoln tip. Zato ne morete ustvarjati predmetov abstraktnega razreda. Kadar razred podeduje abstraktni razred, mora izvesti vse abstraktne metode abstraktnega razreda, če ne sledi, mora biti tudi razglašen kot abstrakten. Abstraktni atribut je podedovan, dokler ni dosežena popolna implementacija abstraktnih metod.

Abstraktni razred lahko vsebuje tudi konkretne metode, ki jih lahko uporabi izpeljani razred. Vendar pa v abstraktnem razredu ne morete razglasiti abstraktnega konstruktorja ali abstraktne statične metode. Splošna oblika abstraktnega razreda v Javi je naslednja:

 abstraktni razred class_name {abstract method_name1 (); abstraktna metoda_ime2 (); : return_type method_name3 (parameter_list) {// konkretna metoda} return_type method_name4 (parameter_list) {// konkretna metoda}}; 

Koncept abstraktnega razreda je podoben v Java in C #. Abstraktni razred se v C ++ nekoliko razlikuje.

V C ++, če ima razred vsaj eno virtualno funkcijo, razred postane abstraktni razred. Namesto ključne besede »abstrakt« se za razglasitev abstraktne metode uporabi ključna beseda »virtual«.

Ključne razlike med vmesnikom in abstraktnim razredom v Javi in ​​C #

  1. Ko imate znanje o tem, kaj se zahteva, vendar ne o tem, kako bi bilo izvedeno, je treba uporabiti vmesnik. Po drugi strani pa, če veste, kaj je zahtevano in delno veste, kako bi bilo izvedeno, uporabite abstraktni razred.
  2. Vmesnik ima vse svoje metode abstraktne, a abstraktni razred ima nekaj abstraktnih metod in nekaj konkretnih metod.
  3. Metode znotraj vmesnika so javne in abstraktne, zato se imenuje tudi čisti abstraktni razred. Po drugi strani pa metode znotraj povzetka niso omejene le na javno in abstraktno.
  4. Metoda vmesnika ne more nikoli biti zasebna, zaščitena, končna, statična, sinhronizirana, domača ali stroga. Po drugi strani pa ni nobenih omejitev za metode abstraktnega razreda.
  5. Spremenljivke v vmesniku so javne in končne, ne glede na to, ali jih deklariramo ali ne, ker takšne omejitve na spremenljivke abstraktnega razreda niso javne in končne.
  6. Spremenljivke v vmesniku ne smejo nikoli biti zasebno zaščitene, prehodne ali volatilne, medtem ko v abstraktnem razredu ni omejitev za spremenljivke.
  7. Spremenljivka vmesnika mora biti inicializirana med deklaracijo. Po drugi strani pa lahko spremenljivke v abstraktnem razredu kadarkoli inicializiramo.
  8. V notranjosti vmesnika ni mogoče deklarirati primerka ali statičnega bloka, lahko pa deklarirate primer ali statični blok znotraj abstraktnega razreda.
  9. V vmesniku ne morete definirati konstruktorja, medtem ko lahko konstruktor definirate znotraj abstraktnega razreda.

Sklep:

Če morate ustvariti osnovni razred, ki vsebuje posplošeno obliko metod, ki jih lahko izvajajo izpeljani razredi glede na njihovo potrebo, pomaga koncept vmesnika in abstraktnega razreda.

Top