Atšķirība starp interfeisu un abstraktu klasi Java & C #

Autors: Laura McKinney
Radīšanas Datums: 1 Aprīlis 2021
Atjaunināšanas Datums: 13 Maijs 2024
Anonim
Atšķirība starp interfeisu un abstraktu klasi Java & C # - Tehnoloģija
Atšķirība starp interfeisu un abstraktu klasi Java & C # - Tehnoloģija

Saturs


Interfeisa un abstraktās klases gan veicina “nepilnīgu tipu” OOP. Dažreiz mums ir nepieciešama superklase, lai definētu “ko darīt”, bet nevis “kā jādara”, bet tā, kā darīt daļu, atvasinātā klase ieviesīs atbilstoši tās vajadzībām “saskarne”Nodrošināt risinājumu tam. Dažreiz mums ir nepieciešama superklases klase, kas definē kādu vispārinātu struktūru, kuru var ieviest ar atvasinātām klasēm, un kādu noteiktu struktūru, kuru var izmantot atvasinātās klases, “abstraktā klase”Piedāvā risinājumu. Galvenā atšķirība starp saskarni un abstrakto klasi ir tā, ka saskarne ir pilnībā nepilnīga, un abstraktā klase ir daļēji nepilnīga.

  1. Salīdzināšanas tabula
  2. Definīcija
  3. Galvenās atšķirības
  4. Secinājums

Salīdzināšanas tabula

Salīdzināšanas pamatsSaskarneAbstraktā klase
PamataJa jums ir tikai zināšanas par prasībām, nevis par tās ieviešanu, jūs izmantojat "interfeisu".Kad jūs daļēji zināt par ieviešanu, jūs izmantojat "Abstraktās klases".
MetodesInterfeiss satur tikai abstraktas metodes.Abstraktajā klasē ir abstraktas, kā arī konkrētas metodes.
Piekļuves modifikators metodēmSaskarnes metodes vienmēr ir “publiska” un “abstrakta”, pat ja mēs to nedeklarējam. Līdz ar to to var teikt par 100% tīru abstraktu klasi.Nav obligāti, ka metode abstraktajā klasē būs publiska un abstrakta. Tam var būt arī konkrētas metodes.
Ierobežots modifikators metodēmSaskarnes metodi nevar deklarēt ar šādiem modifikatoriem:
Publisks: privāts un aizsargāts
Anotācija: galīgais, statiskais, sinhronizētais, dzimtais, precīzais.
Abstraktā klases mainīgā modifikatoriem nav ierobežojumu.
Mainīgo piekļuves modifikatorsInterfeisa mainīgajiem atļautais piekļuves pārveidotājs ir publisks, statisks un galīgs neatkarīgi no tā, vai mēs deklarējam vai ne.Mainīgajiem abstraktajā klasē nav jābūt publiskiem, statiskiem, galīgiem.
Ierobežoti mainīgo mainītājiSaskarnes mainīgos nevar deklarēt kā privātus, aizsargātus, īslaicīgus, nepastāvīgus.Abstraktu klases mainīgo modifikatoriem nav ierobežojumu.
Mainīgo lielumu inicializācijaSaskarnes mainīgie jāinicializē tā deklarēšanas laikā.Nav obligāti, ka abstraktie klases mainīgie ir jāinicializē deklarēšanas laikā.
Instanču un statiskie blokiIekšējā saskarnē jūs nevarat deklarēt instanci vai statisku bloku.Abstract klase pieļauj instanci vai statisku bloku tajā.
KonstruktoriJūs nevarat deklarēt konstruktoru interfeisa iekšpusē.Jūs varat pasludināt konstruktoru abstraktā klasē.


Saskarnes definīcija

Java nepieļauj vairāku mantojumu. Tas ir, viena klase nevar mantot vairāk kā vienu klasi vienlaikus. Iemesls tam ir izskaidrojams ar piemēru. Pieņemsim, ka mums ir divas vecāku klases, A un B, un atvasināta C klase. Atvasinātā C klase manto gan A, gan B klasi.Tagad abiem ir A un B klasei iestatīta metode (), tad C klasei būs jautājums, kuras klases komplekta () metodi vajadzētu mantot. Šīs problēmas risinājums ir “interfeiss”.

Interfeiss ir tīri abstrakta klase. Saskarnes izveidošanai izmantotais atslēgvārds ir “interfeiss”. Tā kā visa saskarnes metode ir pilnīgi abstrakta. Saskarne norāda tikai to, kas klasei jādara, bet tajā nav definēts, kā tā to dara. Tieši tāpēc, ka visa saskarnes iekšienē deklarētā metode ir abstrakta, interfeisam netiek izveidots neviens instancē. Javas “interfeisa” vispārējā forma ir:


piekļuves_specifikators saskarne interfeisa_nosaukums {atgriešanās tipa metode-nosaukums1 (parametru saraksts); atgriešanās tipa metode-nosaukums2 (parametru saraksts); tips galīgais-varname1 = vērtība; tips galīgais-varname2 = vērtība; // ... atgriešanās tipa metode-nameN (parametru saraksts); tips final-varnameN = vērtība; }

Piekļuves specifikators tiek pasludināts par publisku, jo klasēm ir jāīsteno interfeiss.

Mums nav C ++ jēdziena “interfeiss”. Bet Java un C # ļoti labi definē interfeisu.

Java interfeiss:

  • Saskarnes mainīgie pēc noklusējuma vienmēr ir publiski, statiski un galīgi.
  • Mainīgie jāinicializē to deklarēšanas laikā.
  • Mainīgos lielumus nekad nevar atzīt par privātiem, aizsargātiem, īslaicīgiem un nepastāvīgiem.
  • Interfeisa metodes vienmēr ir publiskas un abstraktas, turpretī tās nekad nevar pasludināt par privātām, aizsargātām, galīgām, statiskām, sinhronizētām, vietējām un stingrām.
  • Nevar deklarēt nevienu konstruktoru interfeisa iekšpusē, jo konstruktora galvenais mērķis ir klases mainīgo inicializēšana, bet interfeisā mainīgie tiek inicializēti tā deklarēšanas brīdī.
  • Saskarne var mantot citas saskarnes, taču klasei, kas ievieš šādu saskarni, jāievieš visu pārmantoto saskarņu metodes.
  • Klase var mantot vairāk nekā vienu saskarni vienlaikus, un tai jāīsteno visu pārmantoto saskarņu metodes.

Interfeisa ieviešanas vispārīgā forma Java:

klase klase_nosaukums īsteno interfeisa_nosaukums {// klase-korpuss}

Saskarnes pārmantošanai klase izmanto atslēgvārdu “agregāti”, un klase realizē visu metodi, ko deklarē pārmantots interfeiss.

Saskarne C #:

Interfeiss C # ir gandrīz līdzīgs interfeisam Java, izņemot:

  • Interfeiss C # nedeklarē mainīgos.
  • Saskarnes nosaukums ir prefiksēts ar lielo burtu I un tiek mantots ar kolu (:) zīmi.

C saskarnes ieviešanas vispārīgā forma:

klase klase_nosaukums: interfeisa_nosaukums {// klase-korpuss}

Abstraktās klases definīcija

Klase, kurā ir viena vai vairākas abstraktas metodes, tiek saukta par abstraktu klasi, un klase tiek pasludināta par abstraktu, izmantojot atslēgvārdu “abstrakts”, pirms kuras klases deklarācijas sākumā ir atslēgas vārds “class”. Tā kā abstraktā klase satur abstraktu metodi, tā veido nepilnīgu tipu. Tātad jūs nevarat izveidot abstraktas klases objektus. Ikreiz, kad klase manto abstraktu klasi, tai jāīsteno visas abstraktās klases abstraktās metodes, ja tādas nav, tā arī jādeklarē kā abstrakta. Abstrakts atribūts tiek mantots, līdz tiek panākta pilnīga abstraktu metožu ieviešana.

Abstraktajā klasē var būt arī konkrētas metodes, kuras atvasinātā klase var izmantot tā, kā tā ir. Bet jūs nevarat deklarēt abstraktu konstruktoru vai abstraktu statisku metodi abstraktā klasē. Java abstraktās klases vispārējā forma ir šāda:

abstrakta klase klases_nosaukums {abstrakta metode_nosaukums1 (); abstrakta metode_nosaukums2 (); : return_type metode_nosaukums3 (parametru_saraksts) {// betona metode} return_type metode_nosaukums4 (parametru_saraksts) {// betona metode}};

Abstraktās klases jēdziens ir līdzīgs gan Java, gan C #. Abstraktā klase C ++ klasē nedaudz atšķiras.

Ja klasē ir vismaz viena virtuālā funkcija, tad klasē C ++ klase kļūst par abstraktu klasi. Atslēgvārda “abstrakts” vietā, lai deklarētu abstraktu metodi, tiek izmantots atslēgvārds “virtuāls”.

  1. Ja jums ir zināšanas par to, kas ir vajadzīgs, bet nevis par to, kā tas tiks ieviests, ir jāizmanto interfeiss. No otras puses, ja jūs zināt, kas ir nepieciešams, un daļēji zināt, kā tas tiks ieviests, tad izmantojiet abstraktu klasi.
  2. Saskarnei visas metodes ir abstraktas, bet abstraktajai klasei ir dažas abstraktas metodes un dažas konkrētas metodes.
  3. Interfeisa iekšējās metodes ir publiskas un abstraktas, tāpēc to sauc arī par tīru abstraktu klasi. No otras puses, abstraktās metodes nav tikai publiskas un tikai abstraktas.
  4. Interfeisa metode nekad nevar būt privāta, aizsargāta, galīga, statiska, sinhronizēta, vietēja vai precīza. No otras puses, abstraktās klases metodēm nav ierobežojumu.
  5. Mainīgie interfeisā ir publiski un galīgi neatkarīgi no tā, vai mēs tos deklarējam vai ne, turpretim abstrakta klases mainīgajiem lielumiem nav tādu ierobežojumu, lai tie būtu publiski un tikai galīgi.
  6. Interfeisa mainīgie nekad nevar būt privāti aizsargāti pārejoši vai nepastāvīgi, turpretim mainīgajiem abstraktā klasē nav ierobežojumu.
  7. Saskarnes mainīgais jāinicializē deklarēšanas laikā. No otras puses, mainīgos abstraktā klasē var inicializēt jebkurā laikā.
  8. Saskarnes ietvaros instanci vai statisko bloku nevar deklarēt, taču abstraktā klasē jūs varat deklarēt instanci vai statisko bloku.
  9. Nevar definēt konstruktoru interfeisa iekšpusē, turpretī konstruktoru var definēt abstraktā klasē.

Secinājums:

Ja jums ir jāizveido bāzes klase, kurā ir vispārināta metožu forma, kuru atvasinātās klases var ieviest atbilstoši to vajadzībām, interfeisa un abstraktās klases jēdziens palīdz to izdarīt.