Galvenā atšķirība: saskarne vai protokols ir kopīgs veids, kas ļauj nesaistītiem objektiem sazināties savā starpā. Tā ir saskaņota uzvedība, kas veicina abu objektu mijiedarbību. Abstrakta klase ir objektu klase, ko nevar iztulkot vai izveidot objekta instancē. Šai klasei var nebūt īstenošanas vai tā var būt nepilnīga.
Java ir programmēšanas valoda, kuru ietekmēja C valoda. Tā iegūst lielu daļu no sintakses no C un C + +, taču tai ir mazāk zema līmeņa iekārtu nekā jebkurš. Java ir vispārējas nozīmes programmēšanas valoda, kas ir izstrādāta tā, lai būtu mazāk īstenošanas atkarību salīdzinājumā ar iepriekšējām valodām. Tā ir vienlaicīga, klases un objektorientēta valoda.
Java izstrādāja James Gosling Sun Microsystems un tika izlaists 1995. gadā. Sākotnēji tas tika izlaists kā Sun Microsystems Java platformas pamatelements. Kopš tā laika Sun ir atkārtoti licencējusi lielāko daļu savu Java tehnoloģiju saskaņā ar GNU General Public License. Tas nozīmē, ka visa tehnoloģija, kas ir licencēta saskaņā ar GNU General Public License, ir atvērtā koda un parasti pieejama bez maksas. Sun Microsystems beidzot apvienojās ar Oracle Corporation. Kopš 2012. gada Java ir kļuvusi par vienu no populārākajām programmēšanas valodām lietošanai. Tas jo īpaši attiecas uz klienta-servera tīmekļa lietojumprogrammām. Daudzas citas sistēmas ir izstrādājušas alternatīvas Sun tehnoloģiju ieviešanas iespējas, piemēram, GNU Compiler Java un GNU Classpath.
Abstrakta klase ir objektu klase, ko nevar iztulkot vai izveidot objekta instancē. Šai klasei var nebūt īstenošanas vai tā var būt nepilnīga. Tam var būt arī abstraktas metodes vai īpašības, kas ir kopīgas visām apakšgrupām. Dažās programmēšanas valodās abstrakti veidi bez ieviešanas ir pazīstami kā saskarnes. Java gadījumā abstrakts veids var tikt izveidots, izmantojot atslēgvārdu “abstrakts” klases definīcijā. Abstraktās klases mērķis ir ievietot visas metodes, kas nav īstenotas abstraktajā klasē, un atstāt to apakšklasē, lai noteiktu, kā īstenot šīs klases. Ja klasē ir viena abstrakta metode, klasei jābūt pasludinātai par abstraktu klasi, lai gan nav nepieciešama vismaz viena metode, lai pasludinātu klases abstraktu.
Malliktalksjava.in norāda galvenās atšķirības starp saskarni un abstraktu kā:
- Abstraktai klasei ir konstruktors, bet interfeiss nav.
- Abstraktajām klasēm var būt ieviešanas iespējas dažiem tās locekļiem (metodēm), bet saskarne nevar tikt īstenota nevienam no tās locekļiem.
- Abstraktajām klasēm vajadzētu būt apakšklasēm, kas būs bezjēdzīgas.
- Saskarnes ir jāīsteno citās klasēs, kas būs bezjēdzīgas
- Tikai saskarne var paplašināt citu interfeisu, bet jebkura klase var paplašināt abstraktu klasi.
- Visi mainīgie interfeisos pēc noklusējuma ir galīgi
- Saskarnes nodrošina vairāku mantojumu. Klase var paplašināt tikai vienu citu klasi.
- Saskarnes aprobežojas ar publiskām metodēm un konstantēm bez īstenošanas. Abstraktajām klasēm var būt daļēja īstenošana, aizsargātas daļas, statiskās metodes utt.
- Klase var ieviest vairākas saskarnes. Bet abstraktas klases gadījumā klase var paplašināt tikai vienu abstraktu klasi.
- Saskarnes ir lēnas, jo ir nepieciešama papildu netieša metode, lai atrastu atbilstošu metodi konkrētajā klasē. Abstraktās klases ir ātras.
- Pieejamības modifikators (publiskais / privātais / iekšējais) ir atļauts abstraktai klasei. Interfeiss nepieļauj piekļuves modificētāju
- Abstraktā klasē var būt pilnīgas vai nepilnīgas metodes. Saskarnes var saturēt tikai metodes parakstu, bet ne ķermeni. Tādējādi abstrakta klase var ieviest metodes, bet saskarne nevar īstenot metodes.
- Abstraktā klasē var būt lauki, konstruktori vai destruktori un agregāta īpašības. Interfeiss nevar saturēt laukus, konstruktorus vai destruktorus, un tam ir tikai īpašnieka paraksts, bet tas nav īstenots.
- Dažādi piekļuves modifikatori, piemēram, abstrakti, aizsargāti, iekšēji, publiski, virtuāli utt., Ir noderīgi abstraktajās klasēs, bet ne saskarnēs.
- Abstrakts apjoms ir atkarīgs no atvasinātās klases.
- Interfeisa darbības joma ir līdz jebkuram tās mantojuma ķēdes līmenim.
Tabulas informācija ir kodeproject.com un mindprod.com pieklājība
Saskarne | Abstrakta klase | |
Vairāki mantojumi | Klase var mantot vairākas saskarnes. | Klase var mantot tikai vienu abstraktu klasi. |
Noklusējuma īstenošana | Interfeiss nevar nodrošināt nevienu kodu, tikai parakstu. | Abstrakta klase var sniegt pilnīgu, noklusējuma kodu un / vai tikai detaļas, kas ir jānovērš. |
Piekļuves modifikatori | Interfeisam nevar būt piekļuves modifikatori apakšfunkcijām, funkcijām, īpašībām uc viss tiek uzskatīts par publisku. | Abstraktā klasē var būt piekļuves modifikatori apakšfunkcijām, funkcijām, īpašībām. |
Core vs. Peripheral | Interfeisus izmanto, lai noteiktu klases perifērās spējas. Citiem vārdiem sakot, gan cilvēks, gan transportlīdzeklis var mantot no IMovable interfeisa. | Abstrakta klase definē klases pamatidentitāti, un tajā tiek izmantoti tāda paša veida objekti. |
Homogenitāte | Ja dažādas implementācijas koplieto tikai metodes parakstus, labāk ir izmantot saskarnes. | Ja dažādas realizācijas ir vienāda veida un izmanto kopīgu uzvedību vai statusu, tad abstraktajā klasē ir labāk izmantot. |
Ātrums | Nepieciešams vairāk laika, lai atrastu faktisko metodi attiecīgajās klasēs. | Ātri |
Funkciju pievienošana | Ja interfeisam pievienosim jaunu metodi, tad mums ir jāatrod visas saskarnes realizācijas un jānosaka jaunās metodes ieviešana. | Ja abstraktajai klasei pievienosim jaunu metodi, tad mums ir iespēja nodrošināt noklusējuma ieviešanu, un tāpēc viss esošais kods varētu darboties pareizi. |
Lauki un konstantes | Savienojumos nevar noteikt nevienu lauku. | Abstraktai klasei var būt noteikti lauki un konstantes. |
Terseness | Pastāvīgās deklarācijas saskarnē ir visas iespējamās publiskās statiskās finālas. | Koplietojamo kodu var pievienot abstraktai klasei. |
Konstantes | Statiskās galīgās konstantes tās var izmantot bez kvalifikācijas klasēs, kas īsteno saskarni. | Ir iespējamas gan gadījumu, gan statiskās konstantes. Konstantes var aprēķināt gan statiskā, gan intializatora kodā. |
Trešās puses ērtības | Jebkurai esošai trešās puses klasei var pievienot interfeisa ieviešanu. | Trešās puses klasei ir jābūt pārrakstītai, lai to paplašinātu tikai no abstraktās klases. |
ir-salīdzināms vai var darīt | Interfeisi bieži tiek izmantoti, lai aprakstītu klases perifērās spējas, nevis tās centrālo identitāti, piemēram, automobiļu klase varētu ieviest pārstrādājamo interfeisu, kas varētu attiekties uz daudziem citādi pilnīgi nesaistītiem objektiem. | Abstraktā klase nosaka tās pēcnācēju pamatidentitāti. Īstenotās saskarnes uzskaitīs vispārējās lietas, ko klase var darīt, nevis tās, ko klase ir. Java kontekstā lietotājiem parasti ir jāievieš Runnable interfeiss, nevis jāpaplašina Thread, jo viņi nav ieinteresēti sniegt kādu jaunu Thread funkcionalitāti, viņi parasti vēlas, lai kāds kods varētu darboties patstāvīgi. Viņi vēlas radīt kaut ko, ko var vadīt pavedienā, nevis jauna veida pavedienu. Līdzīgas is-a vs has-a debates parādās, kad jūs nolemjat mantot vai deleģēt. |
Iespraust | Lietotājs var uzrakstīt jaunu rezerves moduli interfeisam, kas nesatur vienu kodu, kas ir kopīgs ar esošajām implementācijām. Kad lietotājs ievieš saskarni, tie sākas no nulles bez noklusējuma ieviešanas. Lietotājam ir jāiegūst instrumenti no citām klasēm; nekas nāk ar saskarni, kas nav tikai dažas konstantes. Tas dod lietotājam iespēju īstenot radikāli atšķirīgu iekšējo dizainu. | Lietotājam ir jāizmanto abstrakta klase kā-ir kods bāzes, ar visu tā pavadošo bagāžu, labu vai sliktu. Abstraktās klases autors ir noteicis lietotāju struktūru. |
Uzturēšana | Ja klienta kods notiek tikai saskarnes ziņā, jūs varat viegli mainīt konkrēto ieviešanu aiz tās, izmantojot rūpnīcas metodi. | Ja klienta kods runā tikai abstraktajā klasē, jūs varat viegli mainīt konkrēto ieviešanu aiz tās, izmantojot rūpnīcas metodi. |