Salīdzinājuma diagramma
Salīdzinājuma pamats | Saskarne | Abstrakta klase |
---|---|---|
Pamata | Ja jums ir tikai zināšanas par prasībām, nevis par tās īstenošanu, izmantojiet "Interface". | Kad jūs daļēji zināt, kādas realizācijas jūs izmantojat "Abstraktās klases". |
Metodes | Saskarne tikai satur abstraktas metodes. | Abstraktajā klasē ir gan abstraktas metodes, gan konkrētas metodes. |
Piekļuves metožu modificētājs | Interfeisa metodes vienmēr ir "publiskas" un "abstraktas", pat ja mēs nepaziņojam. Tādējādi to var teikt par 100%, tīru abstraktu klasi. | Tas nav obligāti, ka metode abstraktā klasē būs publiska un abstrakta. Tam var būt arī konkrētas metodes. |
Ierobežots metožu modifikators | Interfeisa metodi nevar deklarēt ar šādiem modifikatoriem: Publiska: privāta un aizsargāta Kopsavilkums: galīgs, statisks, sinhronizēts, dzimtā, stingrs. | Abstraktās klases mainīgā modifikatoriem nav ierobežojumu. |
Piekļuves mainīgais mainīgais | Acess modifikators, kas atļauts interfeisa mainīgajiem, ir publisks, statisks un galīgs neatkarīgi no tā, vai mēs deklarējam vai nē. | Abstraktās klases mainīgajiem nav jābūt publiskiem, statiskiem, galīgiem. |
Ierobežoti mainīgie mainīgie | Interfeisa mainīgos nevar deklarēt kā privātus, aizsargātus, pārejošus, nepastāvīgus. | Abstrakto klases mainīgo modifikatoriem nav nekādu ierobežojumu. |
Mainīgo inicializācija | Saskarnes mainīgajiem lielumiem jābūt inicializētiem deklarācijas iesniegšanas brīdī. | Nav obligāti, ka abstraktajiem klases mainīgajiem ir jābūt inicializētiem deklarācijas iesniegšanas brīdī. |
Piemēram, statiskie bloki | Iekšējā saskarne, jūs nevarat deklarēt gadījumu vai statisku bloku. | Abstrakta klase ļauj tajā ievietot instanci vai statisku bloku. |
Konstruktori | Jūs nevarat deklarēt konstruktora interfeisu. | Jūs varat pasludināt konstruktoru abstraktā klasē. |
Interfeisa definīcija
Java neļauj veikt vairākus mantojumus. Tas nozīmē, ka viena klase nevar pārņemt vairāk nekā vienu klasi. To var izskaidrot ar piemēru. Pieņemsim, ka mums ir divas vecāku klases, A un B un atvasinātā C klase. Atvasinātā C klase pārņem gan A, gan B klases. Tagad abiem ir A un B klase, kas ir metode (), tad tas būs jautājums C klasei, kura šķiras () metode tai vajadzētu mantot. Šīs problēmas risinājums ir “saskarne”.
access_specifier interfeisa saskarne_name {atgriešanās tipa metode-nosaukums1 (parametru saraksts); atgriešanās tipa metode-nosaukums2 (parametru saraksts); tips final-varname1 = vērtība; tips final-varname2 = vērtība; // ... atgriešanās tipa metode-nosaukumsN (parametru saraksts); tips final-varnameN = vērtība; }
Piekļuves specifikētājs tiek publiskots, jo klasēm ir jāievieš saskarne.
C + + nav “interfeisa” jēdziena. Bet Java un C # definē saskarni ļoti labi.
Saskarne Java:
- Interfeisa mainīgie pēc noklusējuma vienmēr ir publiski, statiski un galīgi.
- Mainīgie lielumi ir jāuzsāk deklarācijas brīdī.
- Mainīgie lielumi nekad nevar tikt pasludināti par privātiem, aizsargātiem, pārejošiem un nepastāvīgiem.
- Interfeisa metodes vienmēr ir publiskas un abstraktas, bet tās nekad nevar deklarēt kā privātas, aizsargātas, galīgas, statiskas, sinhronizētas, dzimtās un stingras.
- Jūs nevarat deklarēt konstruktora iekšējo interfeisu, jo konstruktora galvenais mērķis ir klases mainīgo inicializācija, bet saskarnes mainīgie tiek inicializēti deklarācijas laikā.
- Saskarne var mantot citas saskarnes, bet klasei, kas īsteno šādu saskarni, jāievieš visu mantojamo saskarņu metodes.
- Klase vienlaicīgi var mantot vairāk nekā vienu saskarni, un tai ir jāīsteno visas mantojamo saskarņu metodes.
Vispārēja saskarnes ieviešanas forma Java:
klases klases_nosaukums īsteno interfeisa nosaukumu {// class-body}
Lai mantotu saskarni, klasē tiek izmantots atslēgvārds “īsteno”, un klase īsteno visu metodi, ko deklarējusi mantota saskarne.
Saskarne C #:
Interfeiss C # ir gandrīz līdzīgs interfeisam Java, izņemot:
- Saskarne ar C # nedeklarē mainīgos.
- Interfeisa nosaukums ir piestiprināts ar kapitālu I, un tas ir mantots ar kolu (:) zīmi.
Interfeisa ieviešanas vispārējā forma C #:
klases klases nosaukums: interfeisa nosaukums {// class-body}
Kopsavilkuma klases definīcija
Klasi, kas satur vienu vai vairākas abstraktas metodes, sauc par abstraktu klasi, un kategorija tiek pasludināta par abstraktu, izmantojot atslēgvārdu “abstrakts”, pirms kura tiek ievadīts “klases” atslēgvārds klases deklarācijas sākumā. Tā kā abstraktajā klasē ir abstrakta metode, tā ir nepilnīga. Tādējādi jūs nevarat izveidot abstraktas klases objektus. Ikreiz, kad klase mantos abstraktu klasi, tai ir jāīsteno visas abstraktās klases abstraktās metodes, ja tā nav, tad tā ir arī jādeklarē kā abstrakta.
Abstraktā klase var saturēt arī konkrētas metodes, ko atvasinātā klase var izmantot, kā tas ir. Bet, abstraktajā klasē, jūs nevarat pasludināt abstraktu konstruktoru vai abstraktu statisku metodi. Vispārējā abstrakto klases forma Java ir šāda:
abstrakta klases klases_nosaukums {abstrakta metode_name1 (); abstrakta metode_name2 (); : return_type method_name3 (parametrs_list) {// konkrēta metode} return_type method_name4 (parametrs_list) {// konkrēta metode}};
Abstraktās klases jēdziens ir līdzīgs gan Java, gan C #. Abstrakta klase ir nedaudz atšķirīga C + +.
C + +, ja klasē ir vismaz viena virtuālā funkcija, klase kļūst par abstraktu klasi. Atslēgvārdu “abstrakts” vietā atslēgvārds “virtuāls” tiek izmantots, lai deklarētu abstraktu metodi.
Galvenās atšķirības starp saskarni un abstrakto klasi Java & C #
- Ja jums ir zināšanas par to, kas ir nepieciešams, bet ne par to, kā tas tiks īstenots, jāizmanto saskarne. No otras puses, ja jūs zināt, kas ir nepieciešams un daļēji zina, kā tas tiks īstenots, izmantojiet abstraktu klasi.
- Interfeisam ir visas metodes, kas abstraktas, bet abstraktajai klasei ir dažas abstraktas metodes un dažas konkrētas metodes.
- Interfeisa iekšējās metodes ir publiskas un abstraktas, tāpēc to sauc arī par tīru abstraktu klasi. No otras puses, abstraktā esošās metodes nav tikai publiskas un abstraktas.
- Interfeisa metode nekad nevar būt privāta, aizsargāta, galīga, statiska, sinhronizēta, dzimtā vai stingra. No otras puses, abstraktās klases metodēm nav nekādu ierobežojumu.
- Interfeisa mainīgie lielumi ir publiski un galīgi neatkarīgi no tā, vai mēs tos deklarējam vai nē, tā kā abstraktās klases mainīgajiem nav šāda ierobežojuma par publisku un galīgu.
- Mainīgie interfeisā nekad nevar būt privāti aizsargāti pārejoši vai gaistoši, turpretim abstraktajā klasē nav ierobežojumu mainīgajiem.
- Deklarācijas laikā saskarnes mainīgajam jābūt inicializētam. No otras puses, abstraktās klases mainīgos var inicializēt jebkurā laikā.
- Interfeisa iekšpusē nav iespējams deklarēt gadījumu vai statisku bloku, bet jūs varat pasludināt instanci vai statisko bloku abstraktajā klasē.
- Jūs nevarat definēt konstruktoru interfeisa iekšpusē, bet jūs varat definēt konstruktoru abstraktajā klasē.
Secinājums:
Ja jums ir nepieciešams izveidot bāzes klasi, kas satur vispārēju metožu formu, ko atvasinātās klases var īstenot atbilstoši to vajadzībām, interfeisa un abstraktās klases jēdziens palīdz to darīt.