Keskeinen ero: Liitäntä tai protokolla on yleinen tapa, jonka avulla etuyhteydettömät objektit voivat kommunikoida keskenään. Se edustaa sovittua käyttäytymistä, joka helpottaa näiden kahden kohteen välistä vuorovaikutusta. Abstrakti luokka on sellaisten objektien luokka, joita ei voi tuoda esille tai asettaa objektin esiintymää. Tähän luokkaan ei välttämättä ole toteutusta tai sen toteutus voi olla puutteellista.
Java on ohjelmointikieli, jota C-kieli on vaikuttanut. Se syntyy paljon syntaksista C- ja C ++: sta, mutta sillä on vähemmän matalan tason tiloja kuin kumpikin. Java on yleiskäyttöinen ohjelmointikieli, joka on suunniteltu siten, että sillä on vähemmän täytäntöönpano-riippuvuuksia edellisiin kieliin verrattuna. Se on samanaikainen, luokkakohtainen ja objektorientoitu kieli.
Java on kehittänyt James Gosling Sun Microsystemsissä ja julkaistiin vuonna 1995. Se julkaistiin alun perin Sun Microsystemsin Java-alustan keskeisenä osana. Sun on sittemmin lisensoinut suurimman osan Java-teknologioistaan GNU General Public License -sopimuksen nojalla. Tämä tarkoittaa, että kaikki GNU General Public License -lisenssin alainen lisenssi on avoimen lähdekoodin ja yleisesti saatavilla ilmaiseksi. Sun Microsystems sulautui lopulta Oracle Corporationiin. Vuodesta 2012 Java on tullut yksi suosituimmista ohjelmointikielistä käytettäväksi. Tämä pätee erityisesti asiakas-palvelin-web-sovelluksiin. Monissa muissa järjestelmissä on kehitetty vaihtoehtoisia Sun-teknologioiden toteutuksia, kuten GNU Compiler for Java ja GNU Classpath.
Abstrakti luokka on sellaisten objektien luokka, joita ei voi tuoda esille tai asettaa objektin esiintymää. Tähän luokkaan ei välttämättä ole toteutusta tai sen toteutus voi olla puutteellista. Siinä voi olla myös abstrakteja menetelmiä tai ominaisuuksia, jotka ovat kaikkien alaryhmien yhteisiä. Joissakin ohjelmointikielissä abstrakteja tyyppejä, joilla ei ole toteutusta, kutsutaan rajapintoiksi. Java: ssa voidaan luoda abstrakti tyyppi käyttämällä avainsanaa "abstrakti" luokan määritelmässä. Abstraktin luokan luominen kaikkien menetelmien, joita ei ole toteutettu abstraktissa luokassa, jättämiseksi ja sen jättäminen alaluokkaan sen määrittämiseksi, miten nämä luokat toteutetaan. Jos luokassa on yksi abstrakti menetelmä, luokka on julistettava abstraktiksi luokaksi, vaikka ei tarvitse olla vähintään yhtä ainoaa menetelmää luokan abstraktin julistamiseksi.
Malliktalksjava.in luetteloi tärkeimmät erot käyttöliittymän ja abstraktin välillä:
- Tiivistysluokassa on rakentaja, mutta käyttöliittymä ei ole.
- Tiivistysluokilla voi olla toteutuksia joillekin sen jäsenille (Methods), mutta rajapinnalla ei voi olla toteutusta kenellekään sen jäsenille.
- Tiivistysluokissa tulisi olla muita alaluokkia, jotka ovat hyödyttömiä.
- Liitännöissä on oltava muiden luokkien toteutuksia, jotka ovat hyödyttömiä
- Vain rajapinta voi laajentaa toista rajapintaa, mutta mikä tahansa luokka voi laajentaa abstraktin luokan.
- Kaikki muuttujat rajapinnoissa ovat oletusarvoisesti lopullisia
- Liitännät tarjoavat monen perinnön. Luokka voi laajentaa vain yhden luokan.
- Liitännät rajoittuvat julkisiin menetelmiin ja vakioihin ilman toteutusta. Tiivistysluokilla voi olla osittainen toteutus, suojatut osat, staattiset menetelmät jne.
- Luokka voi toteuttaa useita rajapintoja. Mutta abstraktin luokan tapauksessa luokka voi ulottaa vain yhden abstraktin luokan.
- Liitännät ovat hitaita, koska se edellyttää ylimääräistä epäsuoraa vastaavan menetelmän löytämistä todellisessa luokassa. Abstraktit luokat ovat nopeita.
- Esteettömyysluokka (julkinen / yksityinen / sisäinen) on sallittu abstraktille luokalle. Liitäntä ei salli esteettömyyden muokkausta
- Abstrakti luokka voi sisältää täydellisiä tai puutteellisia menetelmiä. Liitännät voivat sisältää vain menetelmän allekirjoituksen, mutta ei kehoa. Täten abstrakti luokka voi toteuttaa menetelmiä, mutta rajapinta ei voi toteuttaa menetelmiä.
- Abstrakti luokka voi sisältää kenttiä, konstruktoreita tai destruktoreita ja koneen ominaisuuksia. Liitäntä ei voi sisältää kenttiä, rakentajia tai tuhoajia, ja sillä on vain omaisuuden allekirjoitus, mutta sitä ei ole toteutettu.
- Erilaiset käyttömodifioijat, kuten abstrakti, suojattu, sisäinen, julkinen, virtuaalinen jne. Ovat hyödyllisiä abstrakteissa luokissa, mutta eivät rajapinnoissa.
- Tiivistelmäalue on johdettu luokka.
- Liitäntäalue on jopa minkä tahansa tason perintäketjussa.
Taulukon tiedot ovat codeproject.com: n ja mindprod.comin kohteliaisuus
liitäntä | Tiivistelmä luokka | |
Useita perintöjä | Luokka voi periä useita rajapintoja. | Luokka voi periä vain yhden abstraktin luokan. |
Oletusasetus | Liitäntä ei voi antaa koodia, vaan vain allekirjoitusta. | Abstrakti luokka voi antaa täydellisen, oletuskoodin ja / tai vain ne tiedot, jotka on ohitettava. |
Access Modifiers | Käyttöliittymässä ei voi olla käyttöoikeuden muokkaajia osiin, toimintoihin, ominaisuuksiin jne. Kaikki oletetaan julkiseksi. | Abstrakti luokka voi sisältää liittymän, toimintojen, ominaisuuksien käyttömodifikaattoreita. |
Core vs. Peripheral | Liitäntöjä käytetään luokan perifeeristen kykyjen määrittämiseen. Toisin sanoen sekä ihminen että ajoneuvo voivat periä IMovable-rajapinnasta. | Abstrakti luokka määrittelee luokan ydinidentiteetin ja sitä käytetään saman tyyppisiin kohteisiin. |
homogeenisuus | Jos eri toteutukset jakavat vain menetelmien allekirjoitukset, on parempi käyttää Interfaces-ohjelmaa. | Jos eri toteutukset ovat samanlaisia ja käyttävät yhteistä käyttäytymistä tai tilaa, abstrakti luokka on parempi käyttää. |
Nopeus | Vaatii enemmän aikaa todellisen menetelmän löytämiseksi vastaaviin luokkiin. | Nopeasti |
Toimintojen lisääminen | Jos lisäämme uuden menetelmän käyttöliittymään, meidän on jäljitettävä kaikki käyttöliittymän toteutukset ja määritettävä uuden menetelmän toteutus. | Jos lisäämme uuden menetelmän abstraktille luokalle, meillä on mahdollisuus tarjota oletusarvoinen toteutus ja siksi kaikki nykyinen koodi saattaa toimia oikein. |
Kentät ja konstantit | Liitäntöihin ei voi määrittää kenttiä. | Abstraktissa luokassa voi olla määriteltyjä kenttiä ja vakioita. |
Terseness | Käyttöliittymän pysyvät ilmoitukset ovat kaikki oletettuja julkisia lopullisia. | Jaettu koodi voidaan lisätä abstraktiin luokkaan. |
vakiot | Vain staattiset lopulliset vakiot voivat käyttää niitä ilman pätevyyttä luokissa, jotka toteuttavat käyttöliittymän. | Sekä esimerkki- että staattiset vakiot ovat mahdollisia. Sekä staattinen että esimerkki intialisointikoodi ovat mahdollisia myös vakioiden laskemiseksi. |
Kolmannen osapuolen mukavuus | Liitännän toteutus voidaan lisätä mihin tahansa olemassa olevaan kolmannen osapuolen luokkaan. | Kolmannen osapuolen luokka on kirjoitettava uudelleen abstraktista luokasta. |
on -suhteellinen tai voi tehdä | Liitäntöjä käytetään usein kuvaamaan luokan perifeerisiä kykyjä, ei sen keskeistä identiteettiä, esim. Automobile-luokka saattaa toteuttaa kierrätettävän käyttöliittymän, jota voitaisiin soveltaa moniin muuten täysin etuyhteydettömiin kohteisiin. | Abstrakti luokka määrittelee sen jälkeläisten ydinidentiteetin. Toteutetut rajapinnat luetellaan yleiset asiat, joita luokka voi tehdä, ei luokkaa. Java-kontekstissa käyttäjien tulisi tavallisesti toteuttaa Runnable-käyttöliittymä pikemminkin kuin laajentaa Threadia, koska he eivät ole kiinnostuneita tarjoamaan uusia Thread-toimintoja, he haluavat yleensä vain jonkin koodin, joka pystyy toimimaan itsenäisesti. He haluavat luoda jotain, jota voidaan ajaa kierteellä, ei uudenlaista säiettä. Samankaltainen is-a vs. has-a keskustelu tulee esiin, kun päätät periä tai delegoida. |
Kytkeä | Käyttäjä voi kirjoittaa uuden korvaavan moduulin rajapinnalle, joka ei sisällä yhtä olemassa olevaa koodia yhdessä olemassa olevien toteutusten kanssa. Kun käyttäjä toteuttaa käyttöliittymän, ne alkavat tyhjästä ilman oletusohjelmaa. Käyttäjän on hankittava työkaluja muista luokista; mikään muu ei koske muuta kuin muutamaa vakiota. Tämä antaa käyttäjälle vapauden toteuttaa radikaalisti erilainen sisäinen muotoilu. | Käyttäjän on käytettävä abstraktia luokkaa, koska se on koodin pohjalle, jossa on kaikki siihen liittyvät matkatavarat, hyvät tai huonot. Abstraktin luokan kirjoittaja on asettanut käyttäjälle rakenteen. |
ylläpito | Jos asiakaskoodi puhuu vain käyttöliittymän suhteen, voit helposti muuttaa sen taustalla olevaa konkreettista toteutusta tehdasmenetelmällä. | Jos asiakaskoodi puhuu vain abstraktin luokan osalta, voit helposti muuttaa sen taustalla olevaa konkreettista toteutusta tehdasmenetelmällä. |