Ero rajapinnan ja abstraktin luokan välillä Java & C: ssä #

Kirjoittaja: Laura McKinney
Luomispäivä: 1 Huhtikuu 2021
Päivityspäivä: 13 Saattaa 2024
Anonim
Ero rajapinnan ja abstraktin luokan välillä Java & C: ssä # - Tekniikka
Ero rajapinnan ja abstraktin luokan välillä Java & C: ssä # - Tekniikka

Sisältö


Rajapinta- ja tiivistelmäluokka molemmat edistävät "epätäydellistä tyyppiä" OOP: ssa. Joskus tarvitsemme yläluokan määrittelemään "mitä tehdä", mutta ei "kuinka tehdä", johdettu luokka toteuttaa sen, kuinka osa suorittaa, tarpeen mukaan "liitäntä”Tarjoa ratkaisu tähän. Joskus tarvitsemme superluokkaluokan, joka määrittelee jonkin yleistetyn rakenteen, joka voidaan toteuttaa johdettuilla luokilla, ja jonkin määritellyn rakenteen, jota johdetut luokat voivat hyödyntää, ”abstrakti luokka”Tarjoaa ratkaisun tähän. Rajapinnan ja abstraktin luokan välinen ero on se, että rajapinta on täysin epätäydellinen ja abstrakti luokka on osittain epätäydellinen.

  1. Vertailutaulukko
  2. Määritelmä
  3. Keskeiset erot
  4. johtopäätös

Vertailutaulukko

Vertailun perusteetliitäntäAbstrakti luokka
perustiedotKun sinulla on vain tietoa vaatimuksista, ei sen toteutuksesta, käytät "käyttöliittymää".Kun tiedät osittain toteutuksista, käytät "Tiivistelmäluokkia".
menetelmätRajapinta sisältää vain abstrakteja menetelmiä.Tiivistelmäluokka sisältää sekä abstrakteja että konkreettisia menetelmiä.
Menetelmien muokkausohjelmaRajapintamenetelmät ovat aina "julkisia" ja "tiivistelmiä", vaikka emme ilmoittaisi. Siksi voidaan sanoa, että se on 100-prosenttisesti puhdas abstrakti luokka.Ei ole pakollista, että abstraktin luokan menetelmä on julkinen ja abstrakti. Sillä voi olla myös konkreettisia menetelmiä.
Rajoitettu menetelmämuokkainRajapintamenetelmää ei voida ilmoittaa seuraavilla muuntajilla:
Julkinen: yksityinen ja suojattu
Tiivistelmä: lopullinen, staattinen, synkronoitu, natiivi, tiukat.
Abstraktin luokkamuuttujan modifioijille ei ole rajoituksia.
Pääsy muuttujien muokkaimeenLiittymämuuttujille sallittu pääsymuuntaja on julkinen, staattinen ja lopullinen riippumatta siitä, ilmoitammeko me.Abstraktin luokan muuttujien ei tarvitse olla julkisia, staattisia, lopullisia.
Rajoitetut muuttujien muokkaimetRajapintamuuttujia ei voida julistaa yksityisiksi, suojatuiksi, ohimeneviksi, haihtuviksi.Abstraktien luokkamuuttujien modifioijille ei ole rajoituksia.
Muuttujien alustusRajapintamuuttujat on alustettava sen ilmoittamishetkellä.Ei ole pakollista, että abstraktit luokamuuttujat on alustettava ilmoituksen tekohetkellä.
Esimerkki- ja staattiset lohkotSisäisen käyttöliittymän sisällä et voi julistaa esiintymää tai staattista lohkoa.Tiivistelmäluokka sallii instanssin tai staattisen lohkon sen sisällä.
ConstructorsEt voi julistaa rakentajaa käyttöliittymän sisällä.Voit julistaa rakentajan abstraktin luokan sisällä.


Rajapinnan määritelmä

Java ei salli monta perintöä. Eli yksi luokka ei voi periä useampaa kuin yhtä luokkaa kerrallaan. Syynä tähän voidaan selittää esimerkillä. Oletetaan, että meillä on kaksi vanhempaa luokkaa, A ja B ja johdettu luokka C. Johdettu luokka C perii sekä luokat A että B.Nyt molemmilla on luokalla A ja B menetelmät asetettu (), niin luokalle C tulee kysymys siitä, minkä luokan joukon () menetelmän pitäisi periä. Ratkaisu tähän ongelmaan on ”käyttöliittymä”.

Interface on puhdas abstrakti luokka. Rajapinnan luomiseen käytetty avainsana on ”käyttöliittymä”. Koska kaikki käyttöliittymän sisällä olevat menetelmät ovat täysin abstrakteja. Rajapinta määrittelee vain, mitä luokan on tehtävä, mutta se ei määrittele, miten se tekee. Koska kaikki käyttöliittymän sisällä ilmoitetut menetelmät ovat abstrakteja, rajapinnalle ei luoda ilmentymää. Javan ”käyttöliittymän” yleinen muoto on:


access_specifier liitäntä rajapinnan_nimi {paluutyyppinen menetelmä-nimi1 (parametriluettelo); paluu-tyyppinen menetelmä-nimi2 (parametriluettelo); tyyppi lopullinen -varname1 = arvo; tyyppi lopullinen -varname2 = arvo; // ... paluu-tyyppinen menetelmä-nimiN (parametriluettelo); tyyppi lopullinen -varnameN = arvo; }

Käyttöoikeustiedot määritetään julkisiksi, koska luokkien on toteutettava rajapinta.

Meillä ei ole käsitettä ”käyttöliittymä” C ++: ssa. Mutta Java ja C # määrittelevät käyttöliittymän erittäin hyvin.

Käyttöliittymä Java:

  • Rajapinnan muuttujat ovat oletuksena aina julkisia, staattisia ja lopullisia.
  • Muuttujat on alustettava ilmoittamishetkellä.
  • Muuttujia ei voida koskaan julistaa yksityisiksi, suojatuiksi, ohimeneviksi ja haihtuviksi.
  • Rajapinnan menetelmät ovat aina julkisia ja abstrakteja, kun taas niitä ei voida koskaan julistaa yksityisiksi, suojatuiksi, lopullisiksi, staattisiksi, synkronoiduiksi, alkuperäisiksi ja tiukaisiksi.
  • Et voi julistaa mitään rakentajaa rajapinnan sisällä, koska rakentajan päätarkoitus on luokkamuuttujien alustus, mutta rajapintamuuttujat alustetaan sen ilmoittamishetkellä.
  • Rajapinta voi periä muita rajapintoja, mutta tällaisen rajapinnan toteuttavan luokan on toteutettava kaikkien perittyjen rajapintojen menetelmät.
  • Luokka voi periä useamman kuin yhden käyttöliittymän kerrallaan, ja sen on toteutettava kaikkien perittyjen rajapintojen kaikki menetelmät.

Yleinen muoto käyttöliittymän toteuttamiseksi Java:

luokka luokan_nimi toteuttaa käyttöliittymän_nimi {// luokan runko}

Rajapinnan perimiseksi luokka käyttää avainsanaa “työvälineet” ja luokka toteuttaa kaikki perinnöllisen rajapinnan ilmoittamat menetelmät.

Liitäntä C #:

C # -rajapinta on melkein samanlainen kuin Java-rajapinta paitsi:

  • C # -rajapinta ei ilmoita muuttujia.
  • Rajapinnan nimi on etuliite isoilla kirjaimilla I, ja se peritään kaksoispisteellä (:).

Yleinen muoto liitynnän toteuttamiseksi C #: ssä:

luokka luokan_nimi: käyttöliittymän_nimi {// luokanrunko}

Määritelmä Abstrakti luokka

Luokkaa, joka sisältää yhden tai useamman abstraktin menetelmän, kutsutaan abstraktiksi luokkaksi, ja luokka julistetaan abstraktiksi käyttämällä avainsanaa "abstrakti", jota edeltää "luokka" avainsana luokan ilmoituksen alussa. Koska abstrakti luokka sisältää abstraktin menetelmän, se muodostaa epätäydellisen tyypin. Siksi et voi luoda abstraktin luokan objekteja. Aina kun luokka perii abstraktin luokan, sen on toteutettava kaikki abstraktin luokan abstraktit menetelmät, ellei sitä niin ole, se on myös julistettava abstraktiksi. Abstrakti ominaisuus peritään, kunnes abstraktit menetelmät pannaan kokonaan täytäntöön.

Abstrakti luokka voi sisältää myös konkreettisia menetelmiä, joita johdettu luokka voi hyödyntää sellaisenaan. Mutta abstraktin luokan sisällä ei voida julistaa abstraktia rakentajaa tai abstraktista staattista menetelmää. Java-abstraktin luokan yleinen muoto on seuraava:

abstrakti luokka luokan_nimi {abstrakti menetelmä_nimi1 (); abstrakti menetelmä_nimi2 (); : return_type method_name3 (parametrilista) {// betonimenetelmä} return_type method_name4 (parametrilista) {// betonimenetelmä}};

Abstraktin luokan käsite on samanlainen sekä Javassa että C #: ssä. Abstrakti luokka on hiukan erilainen C ++: ssa.

Jos luokassa C ++ on ainakin yksi virtuaalifunktio, luokasta tulee abstrakti luokka. Avainsanan "abstrakti" sijasta avainsanaa "virtuaali" käytetään ilmaisemaan abstrakti menetelmä.

  1. Kun sinulla on tietoa "mitä vaaditaan", mutta ei "miten se toteutettaisiin", on käytettävä käyttöliittymää. Toisaalta, jos tiedät mitä vaaditaan ja tiedät osittain sen toteuttamisen, käytä abstraktia luokkaa.
  2. Rajapinnassa on kaikki menetelmät abstraktit, mutta abstraktissa luokassa on joitakin abstrakteja menetelmiä ja joitain konkreettisia menetelmiä.
  3. Rajapinnan sisällä olevat menetelmät ovat julkisia ja abstrakteja, joten sitä kutsutaan myös puhtaana abstraktiksi luokkaksi. Toisaalta abstraktin sisällä olevat menetelmät eivät ole rajoitettuja olemaan julkisia ja vain abstrakteja.
  4. Rajapintamenetelmä ei voi koskaan olla yksityinen, suojattu, lopullinen, staattinen, synkronoitu, natiivi tai tiuha. Toisaalta abstraktin luokan menetelmille ei ole rajoituksia.
  5. Rajapinnan muuttujat ovat julkisia ja lopullisia riippumatta siitä, julistammeko ne vai ei, kun taas abstraktin luokan muuttujilla ei ole tällaista rajoitusta, joka olisi vain julkinen ja lopullinen.
  6. Rajapinnan muuttujat eivät voi koskaan olla yksityisesti suojattuja ohimeneviä tai haihtuvia, kun taas abstraktissa luokassa ei ole rajoituksia muuttujiin.
  7. Rajapinnan muuttuja on alustettava ilmoituksen aikana. Toisaalta abstraktin luokan muuttujat voidaan alustaa milloin tahansa.
  8. Rajapinnan sisällä ilmentymää tai staattista lohkoa ei voida ilmoittaa, mutta voit ilmoittaa ilmentymän tai staattisen lohkon abstraktissa luokassa.
  9. Et voi määritellä rakentajaa rajapinnan sisällä, kun taas voit määrittää rakentajan abstraktin luokan sisällä.

johtopäätös:

Kun sinun on luotava perusluokka, joka sisältää yleistetyn menetelmän, joka voidaan johtaa johdettuilla luokilla niiden tarpeen mukaan, käyttöliittymän ja abstraktin luokan käsite auttaa siihen.