Razlika med vmesnikom in abstraktnim razredom v Java & C #

Avtor: Laura McKinney
Datum Ustvarjanja: 1 April 2021
Datum Posodobitve: 11 Maj 2024
Anonim
Razlika med vmesnikom in abstraktnim razredom v Java & C # - Tehnologija
Razlika med vmesnikom in abstraktnim razredom v Java & C # - Tehnologija

Vsebina


Vmesnik in razred Abstrakt prispevata k »nepopolni vrsti« v OOP. Včasih potrebujemo superrazred za opredelitev "kaj storiti", ne pa "kako to storiti", kako to storiti, bo izveden razred izvedel v skladu s svojimi potrebami, "vmesnik"Dajte rešitev za to. Včasih potrebujemo razred superklasa, ki definira neko posplošeno strukturo, ki jo lahko izvedejo izvedeni razredi, in določeno strukturo, ki jo lahko uporabijo izpeljani razredi, "abstraktni razred"Ponuja rešitev za to. Temeljna razlika med vmesnikom in abstraktnim razredom je, da je vmesnik popolnoma nepopoln, abstraktni razred pa je delno nepopoln.

  1. Primerjalna tabela
  2. Opredelitev
  3. Ključne razlike
  4. Zaključek

Primerjalna tabela

Osnove za primerjavoVmesnikIzvleček razreda
OsnovniKo poznate samo zahteve, ne pa njihovega izvajanja, uporabite "Vmesnik".Ko delno veste za izvedbe, uporabite "Abstraktne razrede".
MetodeVmesnik vsebuje samo abstraktne metode.Povzetek vsebuje tako abstraktne kot tudi konkretne metode.
Modifikator dostopa do metodMetode vmesnikov so vedno "javne" in "abstraktne", tudi če jih ne izjavimo. Zato lahko rečemo, da je 100% čist 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
Izvleček: končno, statično, sinhronizirano, izvorno, striktno.
Za modifikatorje spremenljivke abstraktnega razreda ni omejitev.
Modifikator dostopa do spremenljivkSpremenljivka dostopa, dovoljena za vmesniške spremenljivke, je javna, statična in končna, ali izjavljamo ali ne.Spremenljivke v abstraktnem razredu ne smejo biti javne, statične in končne.
Omejevalni modifikatorji spremenljivkSpremenljivk vmesnikov ni mogoče razglasiti za zasebne, zaščitene, prehodne, nestanovitne.Za modifikatorje abstraktnih spremenljivk razreda ni omejitev.
Inicializacija spremenljivkVmesniške spremenljivke je treba inicializirati ob deklaraciji.Ni obvezno, da je treba abstraktne spremenljivke razreda inicializirati ob deklaraciji.
Instančni in statični blokiZnotraj vmesnika ne morete prijaviti primerka ali statičnega bloka.Abstraktni razred omogoča primerek ali statični blok v njem.
KonstruktorjiV notranjosti vmesnika konstruktorja ne morete prijaviti.Konstruktor lahko prijavite znotraj abstraktnega razreda.


Opredelitev vmesnika

Java ne dovoljuje večkratnega dedovanja. To pomeni, da posamezni razred hkrati ne more podedovati več razredov. Razlog za to je mogoče pojasniti s primerom. Denimo, da imamo dva matična razreda, A in B in izpeljani razred C. Izvedeni razred C podeduje oba razreda A in B.Zdaj imata obe vrsti razredov A in B nastavljeno (), potem bo za razred C vprašanje, kateri razred set () naj bi podedoval. Rešitev tega problema je "vmesnik".

Vmesnik je čisti abstraktni razred. Ključna beseda, ki se uporablja za ustvarjanje vmesnika, je "vmesnik". Kot vsa metoda znotraj vmesnika je popolnoma abstraktna. Vmesnik samo določa, kaj mora razred narediti, vendar ne določa, kako to počne. Ker so vse metode, deklarirane znotraj vmesnika, abstraktne, ni nobenega primerka za vmesnik. Splošna oblika "vmesnika" v Javi je:


access_specifier vmesnik interface_name {return-type method-name1 (seznam parametrov); metoda vrnitve-type-name2 (seznam parametrov); vnesite final-varname1 = vrednost; vnesite final-varname2 = vrednost; // ... metoda povratnega tipa-nameN (seznam parametrov); vnesite final-varnameN = vrednost; }

Specifik dostopa je razglašen za javni, ker morajo razredi izvajati vmesnik.

V C ++ nimamo koncepta vmesnika. Toda Java in C # zelo dobro definirata vmesnik.

Vmesnik v Javi:

  • Spremenljivke vmesnika so privzeto vedno javne, statične in končne.
  • Spremenljivke je treba inicializirati ob deklaraciji.
  • Spremenljivk nikoli ne moremo razglasiti za zasebne, zaščitene, prehodne in nestanovitne.
  • Metode vmesnika so vedno javne in abstraktne, medtem ko jih nikoli ne moremo razglasiti za zasebne, zaščitene, končne, statične, sinhronizirane, izvorne in stroge.
  • V notranjosti vmesnika ne morete prijaviti nobenega konstruktorja, saj je glavni namen konstruktorja inicializacija spremenljivk razreda, vendar se v spremenljivkah vmesnikov inicializirajo ob njegovi deklaraciji.
  • Vmesnik lahko podeduje druge vmesnike, vendar mora razred, ki izvaja tak vmesnik, izvajati metode vseh podedovanih vmesnikov.
  • Razred lahko hkrati podeduje več vmesnikov in mora izvajati vse metode vseh podedovanih vmesnikov.

Splošna oblika izvajanja vmesnika na Javi:

class class_name izvaja vmesnik_ime {// class-body}

Za podedovanje vmesnika razred uporablja ključno besedo "Implements" in razred izvaja vse metode, ki jih je izročil podedovani vmesnik.

Vmesnik v C #:

Vmesniki v C # so skoraj podobni vmesniku na Javi, le:

  • Vmesnik v C # ne deklarira spremenljivk.
  • Ime vmesnika ima predpono z veliko začetnico 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 in razred je razglašen za abstraktni s ključno besedo »abstrakt«, pred katero je na začetku deklaracije razreda ključna beseda »razred«. Ker abstraktni razred vsebuje abstraktno metodo, je neskončen. Zato ne morete ustvariti predmetov abstraktnega razreda. Kadarkoli razred podeduje abstraktni razred, mora izvajati vse abstraktne metode abstraktnega razreda, če ne, potem mora biti razglašen tudi kot abstraktni. Abstraktni atribut se podeduje, dokler ne dosežemo popolne izvedbe abstraktnih metod.

Abstraktni razred lahko vsebuje tudi konkretne metode, ki jih lahko izvede izpeljani razred, kakršen je. Toda znotraj abstraktnega razreda ne morete prijaviti abstraktnega konstruktorja ali abstraktne statične metode. Splošna oblika abstraktnega razreda v Javi je naslednja:

abstraktni razred class_name {abstraktna metoda_ime1 (); abstraktna metoda_ime2 (); : return_type method_name3 (parameter_list) {// metoda betona} return_type method_name4 (parameter_list) {// metoda betona}};

Koncept abstraktnega razreda je podoben tako v Javi kot v C #. Abstraktni razred je pri C ++ nekoliko drugačen.

V C ++, če ima razred vsaj eno virtualno funkcijo, postane razred abstrakten razred. Namesto ključne besede "abstrakt" se za razglasitev abstraktne metode uporablja ključna beseda "virtualna".

  1. Ko veste, kaj je potrebno, ne pa tudi, kako bi bilo to izvedeno, je treba uporabiti vmesnik. Po drugi strani pa, če veste, kaj se zahteva, in delno veste, kako bi se to izvedlo, uporabite abstraktni razred.
  2. Vmesnik ima vse svoje metode abstraktne, vendar abstraktni razred ima nekaj abstraktnih metod in nekaj konkretnih metod.
  3. Metode znotraj vmesnika so javne in abstraktne, zato se imenuje tudi kot čisti abstraktni razred. Po drugi strani metode znotraj abstrakta niso omejene samo na javne in abstraktne.
  4. Metoda vmesnika nikoli ne sme biti zasebna, zaščitena, končna, statična, sinhronizirana, izvorna ali stroga. Po drugi strani metode abstraktnega razreda nimajo omejitev.
  5. Spremenljivke vmesnika so javne in končne, ne glede na to, ali jih izjavimo ali ne, medtem ko ni nobene takšne omejitve spremenljivk abstraktnega razreda, ki bi bile javne in končne.
  6. Spremenljivke v vmesniku nikoli ne morejo biti zasebno zaščitene prehodno ali nestanovitno, medtem ko v abstraktnem razredu ni omejitev za spremenljivke.
  7. Spremenljivka vmesnika mora biti inicializirana med deklaracijo. Po drugi strani se lahko spremenljivke v abstraktnem razredu kadar koli inicializirajo.
  8. Znotraj vmesnika ni mogoče navesti primerka ali statičnega bloka, vendar lahko v abstraktnem razredu razglasite primerek ali statični blok.
  9. Konstruktorja ne morete definirati znotraj vmesnika, konstruktorja pa lahko določite znotraj abstraktnega razreda.

Zaključek:

Ko morate ustvariti osnovni razred, ki vsebuje posplošeno obliko metod, ki jih lahko izvedeni razredi izvedejo glede na svoje potrebe, pri tem pomagata koncept vmesnika in abstraktni razred.