Ključna razlika: vmesnik ali protokol je običajen način, ki omogoča nepovezanim objektom, da komunicirajo med seboj. Predstavlja dogovorjeno obnašanje, ki olajša interakcijo med obema objektoma. Abstraktni razred je razred objektov, ki jih ni mogoče ustvariti ali nastaviti za primerek objekta. Ta razred morda nima izvedbe ali ima lahko nepopolno izvedbo.
Java je programski jezik, na katerega vpliva jezik C. Veliko sintakse izhaja iz C in C ++, vendar ima manj naprav z nizkimi stopnjami kot tudi. Java je programski jezik za splošne namene, ki je zasnovan tako, da ima manj odvisnosti od izvedbe v primerjavi s prejšnjimi jeziki. Je sočasen, na podlagi razreda in objektno usmerjen jezik.
Java je razvil James Gosling pri Sun Microsystems in je izšel leta 1995. Prvotno je bil izdan kot osnovna komponenta Java platforme Sun Microsystems. Od takrat je Sun ponovno licenciral večino svojih tehnologij Java pod GNU General Public License. To pomeni, da je vsa tehnologija, licencirana pod GNU General Public License, odprtokodna in splošno dostopna brezplačno. Sun Microsystems se je nazadnje združil v Oracle Corporation. Od leta 2012 je Java postala eden najbolj priljubljenih programskih jezikov za uporabo. To še posebej velja za spletne aplikacije odjemalec-strežnik. Mnogi drugi sistemi so razvili alternativne implementacije tehnologij Sun, kot sta GNU Compiler for Java in GNU Classpath.
Abstraktni razred je razred objektov, ki jih ni mogoče ustvariti ali nastaviti za primerek objekta. Ta razred morda nima izvedbe ali ima lahko nepopolno izvedbo. Lahko ima tudi abstraktne metode ali lastnosti, ki so skupne vsem podskupinam. V nekaterih programskih jezikih so abstraktni tipi brez implementacije znani kot vmesniki. V Javi lahko izdelamo abstraktni tip z uporabo ključne besede „abstrakt“ v definiciji razreda. Namen abstraktnega razreda je postaviti vse metode, ki se ne izvajajo v abstraktnem razredu, in prepustiti podklasu, da določi, kako izvajati te razrede. Če ima razred eno abstraktno metodo, mora biti razred deklariran kot abstraktni razred, čeprav ni treba imeti vsaj ene same metode za razglasitev povzetka razreda.
Malliktalksjava.in navaja glavne razlike med vmesnikom in abstraktno kot:
- Abstraktni razred ima konstruktor, vmesnik pa ne.
- Abstraktni razredi imajo lahko implementacije za nekatere svoje člane (Methods), vendar vmesnik ne more imeti implementacije za nobenega od svojih članov.
- Abstraktni razredi bi morali imeti še druge razrede, ki bi bili neuporabni.
- Vmesniki morajo imeti implementacije drugih razredov, ki bodo neuporabni
- Samo vmesnik lahko razširi drug vmesnik, vendar lahko vsak razred razširi abstraktni razred.
- Vse spremenljivke v vmesnikih so privzeto končne
- Vmesniki zagotavljajo obliko večkratnega dedovanja. Razred lahko razširi samo še en razred.
- Vmesniki so omejeni na javne metode in konstante brez izvedbe. Abstraktni razredi imajo lahko delno izvedbo, zaščitene dele, statične metode itd.
- Razred lahko izvaja več vmesnikov. V primeru abstraktnega razreda lahko razred razširi le en abstraktni razred.
- Vmesniki so počasni, saj je za iskanje ustrezne metode v dejanskem razredu potrebna dodatna usmerjenost. Abstraktni razredi so hitri.
- Spreminjevalec dostopnosti (javno / zasebno / notranje) je dovoljen za abstraktni razred. Vmesnik ne dovoljuje modifikatorja dostopnosti
- Abstraktni razred lahko vsebuje popolne ali nepopolne metode. Vmesniki lahko vsebujejo samo podpis metode, ne pa tudi telesa. Tako lahko abstraktni razred izvaja metode, vendar vmesnik ne more izvajati metod.
- Abstraktni razred lahko vsebuje polja, konstruktorje ali destruktorje in lastnosti izvajanja. Vmesnik ne sme vsebovati polj, konstruktorjev ali destruktorjev in ima samo lastniški podpis, vendar brez izvedbe.
- Različni modifikatorji dostopa, kot so abstraktni, zaščiteni, notranji, javni, virtualni itd., So koristni v abstraktnih razredih, ne pa v vmesnikih.
- Abstraktni obseg je do izpeljanega razreda.
- Obseg vmesnika je do katere koli ravni njegove verige dedovanja.
Informacije za razpredelnico so podprte z codeproject.com in mindprod.com
Vmesnik | Abstraktni razred | |
Večkratno dedovanje | Razred lahko podeduje več vmesnikov. | Razred lahko podeduje samo en abstraktni razred. |
Privzeta izvedba | Vmesnik ne more zagotoviti nobene kode, samo podpis. | Abstraktni razred lahko zagotovi popolno, privzeto kodo in / ali samo podrobnosti, ki jih je treba razveljaviti. |
Modifikatorji dostopa | Vmesnik ne more imeti modifikatorjev dostopa za pods, funkcije, lastnosti itd. Vse je predpostavljeno kot javno. | Abstraktni razred lahko vsebuje modifikatorje dostopa za pods, funkcije, lastnosti. |
Core in Peripheral | Vmesniki se uporabljajo za definiranje perifernih zmožnosti razreda. Z drugimi besedami, človek in vozilo lahko podedujeta iz vmesnika, ki ga je mogoče vnašati. | Abstraktni razred definira jedrno identiteto razreda in se uporablja za objekte istega tipa. |
Homogenost | Če različne izvedbe uporabljajo le podpise metode, je bolje uporabiti vmesnike. | Če so različne izvedbe iste vrste in uporabljajo običajno vedenje ali status, potem je abstraktni razred bolje uporabiti. |
Hitrost | Zahteva več časa za iskanje dejanske metode v ustreznih razredih. | Hitro |
Dodajanje funkcionalnosti | Če vmesniku dodamo novo metodo, moramo izslediti vse izvedbe vmesnika in definirati implementacijo za novo metodo. | Če dodajamo novo metodo abstraktnemu razredu, potem imamo možnost, da zagotovimo privzeto implementacijo in zato lahko vsa obstoječa koda deluje pravilno. |
Polja in konstante | V vmesnikih ni mogoče določiti nobenih polj. | Abstraktni razred ima lahko definirana polja in konstante. |
Terseness | Deklaracije konstant v vmesniku so vse domnevne statične končne. | Shared code lahko dodate v abstraktni razred. |
Konstante | Samo statične končne konstante jih lahko uporabljajo brez kvalifikacij v razredih, ki izvajajo vmesnik. | Možne so statične in statične konstante. Statična in primerna intialiser koda sta prav tako možna za izračun konstant. |
Udobje tretjih oseb | Izvedba vmesnika se lahko doda kateri koli obstoječi razred tretje stranke. | Razred tretje osebe je treba ponovno napisati, da se razširi le iz abstraktnega razreda. |
je-a v primerjavi z možnostjo ali zmožnostjo | Vmesniki se pogosto uporabljajo za opis perifernih zmožnosti razreda, ne pa za njegovo osrednjo identiteto, npr. Razred Automobile lahko izvaja vmesnik, ki ga je mogoče reciklirati, kar bi lahko veljalo za številne sicer popolnoma nepovezane objekte. | Abstraktni razred definira jedro identitete njegovih potomcev. Izvedeni vmesniki naštevajo splošne stvari, ki jih razred lahko stori, ne stvari, ki jih je razred. V kontekstu Java morajo uporabniki običajno izvajati vmesnik Runnable in ne razširiti Thread, ker jih dejansko ne zanima, da bi ponudili nekaj novih funkcionalnosti Thread, običajno samo želijo nekaj kode, da bi lahko delovala neodvisno. Želijo ustvariti nekaj, kar se lahko izvaja v niti, ne pa nove vrste niti. Podobna je-a vs ima-razpravo pride, ko se odločite, da boste podedovali ali delegirali. |
Vključiti | Uporabnik lahko napiše nov nadomestni modul za vmesnik, ki ne vsebuje ene palice kode skupaj z obstoječimi izvedbami. Ko uporabnik izvaja vmesnik, se začnejo iz ničle brez privzete implementacije. Uporabnik mora pridobiti orodja iz drugih razredov; z vmesnikom ni nekaj, razen nekaj konstant. To daje uporabniku svobodo pri izvajanju radikalno drugačnega notranjega oblikovanja. | Uporabnik mora uporabiti abstraktni razred kot-je za bazo kod, pri čemer je vsa pripadajoča prtljaga dobra ali slaba. Avtor abstraktnega razreda je uporabniku naložil strukturo. |
Vzdrževanje | Če koda odjemalca govori le v smislu vmesnika, lahko preprosto spremenite konkretno izvedbo za njo, z uporabo tovarniške metode. | Če koda odjemalca govori le v abstraktnem razredu, lahko preprosto spremenite konkretno izvedbo za njo, z uporabo tovarniške metode. |