Abstrakta klase izskatās daudz kā interfeiss, bet OOP iesācējiem šī koncepcija ir nedaudz mulsinoša. Konceptuāli abstrakta klase izskatās gluži kā saskarne, protams, bez jebkādas ieviešanas, lai arī viņiem ir diezgan liela atšķirību daļa. Kaut arī abstraktu klasi var daļēji vai pilnībā ieviest, interfeiss ir jāievieš pilnībā. Visbūtiskākā atšķirība starp abām ir tāda, ka abstraktajai klasei var būt noklusējuma ieviešana, savukārt saskarne ir tikai metožu definīcija, kurā ir tikai dalībnieku deklarācijas. Detalizēti apspriedīsim abu teorētiskos aspektus.
Abstrakta klase ir īpašs klases tips, kas darbojas kā citu klašu pamats un kuru nevar uzreiz realizēt. Abstraktas klases ieviešanas loģiku nodrošina tās atvasinātās klases. Lai klasi padarītu abstraktu, tiek izmantots “abstrakts” modifikators, kas nozīmē, ka no tā atvasinātajā klasē ir jāievieš daži trūkstoši ieviešanas varianti. Tajā ir gan abstrakti, gan neabstrakti biedri. Abstraktā klase ir paredzēta, lai nodrošinātu pamata funkcionalitāti, kuru var tālāk dalīt un pārņemt vairākās atvasinātās klasēs. Ir lietderīgi izvairīties no jebkāda veida kodu kopēšanas. Tie izskatās ļoti līdzīgi interfeisiem, bet ar papildu funkcionalitāti.
Turpretī saskarne nav klase, kurā ir tikai funkcionalitātes paraksts. Tas ir modelis bez ieviešanas. Konceptuālā nozīmē, ka tikai metožu definīcija satur tikai dalībnieku deklarācijas. Tā ir tukša čaula, kurā nav dalībnieku ieviešanas. Tas ir kā abstrakta bāzes klase, kurā ir tikai tādi abstrakti dalībnieki kā metodes, notikumi, indeksatori, rekvizīti utt. To nevar tieši momentēt, un tās dalībniekus var ieviest jebkura klase. Turklāt klase var ieviest vairākas saskarnes, tomēr klase var mantot tikai vienu klasi.
Abstraktā klase | Saskarne |
Abstraktajai klasei var būt visi piekļuves pārveidotāji, lai locekļi deklarētu funkcijas, apakšsistēmas un rekvizītus. | Saskarnei nav atļauts piekļuves pārveidotājs dalībnieku, funkciju, apakšdaļu, rekvizītu utt. Deklarēšanai. Visi dalībnieki tiek uzskatīti par netieši publiskiem.. |
Klase var izmantot tikai vienu abstraktu klasi. | Klase var mantot neierobežotu skaitu interfeisu. |
Vairāku mantojumu abstraktā klasē neatbalsta. | Saskarne var atbalstīt vairākus mantojumus. |
Tehniski tā ir klase, kurā var būt vai nevar būt gan definīcija, gan tās ieviešana. | Interfeisam var būt tikai funkcionalitātes paraksts, tāpēc tas būtībā ir tukšs apvalks. |
Abstraktā klasē var būt dalībnieki. Consts, definētās metodes un metožu daļas. | Interfeiss var saturēt tikai metodes un līgumus. |
Tas definē klases galveno identitāti un tiek izmantots, lai aprakstītu viena un tā paša datu tipa objektus. | To izmanto, lai aprakstītu klases perifērijas spējas. |
Abstraktas klases dalībnieki nevar būt statiski, ja vien tie nav pilntiesīgi locekļi. | Saskarnes dalībnieki nevar būt statiski. |
Tas ir ideāli piemērots tāda paša veida un parastas uzvedības ieviešanai. | Labāk ir izmantot saskarnes, ja vairākās implementācijās ir kopīgi tikai metodes paraksti. |
Tam var būt konstruktora deklarācija. | Tai nevar būt konstruktora deklarācija. |
Abstraktajai klasei ir iepriekš definēti lauki un konstantes. | Laukus nevar definēt saskarnēs. |
Tam var būt gan abstraktas, gan neabstraktas metodes. | Tam var būt tikai abstraktas metodes. |
Kāda ir atšķirība starp abstraktu klasi un interfeisu? Tas, iespējams, ir viens no visbiežāk uzdotajiem jautājumiem jebkurā tehniskajā intervijā. Jūs, visticamāk, atradīsit pārpilnību informāciju par abstraktajām klasēm un saskarnēm jebkurā C # apmācībā, tomēr izpratne par atšķirību starp abām ir diezgan sarežģīta. Jūs varat konsolidēt visu informāciju, kuru varat atrast, un joprojām nevarat to iegūt pietiekami daudz. Nu, konceptuāli abi ir vissvarīgākie termini programmēšanā un ir diezgan vienādi, tomēr funkcionalitātes ziņā tie ļoti atšķiras. Kaut arī abstraktā klase ir īpašs klases tips, kas darbojas kā pamats citām klasēm, interfeiss, no otras puses, ir tikai tukša čaula ar tikai dalībnieku deklarācijām.