Skirtumas tarp „Java & C“ sąsajos ir abstrakčios klasės

Autorius: Laura McKinney
Kūrybos Data: 1 Balandis 2021
Atnaujinimo Data: 13 Gegužė 2024
Anonim
Skirtumas tarp „Java & C“ sąsajos ir abstrakčios klasės - Technologija
Skirtumas tarp „Java & C“ sąsajos ir abstrakčios klasės - Technologija

Turinys


Sąsajos ir abstrakčios klasės prisideda prie „nepilno tipo“ OOP. Kartais mums reikia superklasės, kad apibrėžtume „ką daryti“, bet ne „kaip daryti“, o tai, kaip padaryti dalį, išvestinė klasė įgyvendins pagal savo poreikį “sąsaja“Pasiūlykite sprendimą. Kartais mums reikalinga superklasė, apibrėžianti tam tikrą apibendrintą struktūrą, kurią gali įgyvendinti išvestinės klasės, ir tam tikra apibrėžta struktūra, kurią gali naudoti išvestinės klasės “.abstrakčioji klasė“Yra sprendimo būdas. Esminis skirtumas tarp sąsajos ir abstrakčios klasės yra tas, kad sąsaja yra visiškai neišsami, o abstrakti klasė yra iš dalies neišsami.

  1. Palyginimo diagrama
  2. Apibrėžimas
  3. Pagrindiniai skirtumai
  4. Išvada

Palyginimo diagrama

Palyginimo pagrindasSąsajaAnotacija
PagrindinisKai turite tik žinių apie reikalavimus, o ne apie jo įgyvendinimą, naudojate „Sąsają“.Kai iš dalies žinote apie įgyvendinimus, naudojate „Santraukų klases“.
MetodaiSąsajoje yra tik abstraktūs metodai.Anotacija klasėje yra ir abstrakčių, ir konkrečių metodų.
Prieigos modifikatoriusSąsajos metodai visada yra „vieši“ ir „abstraktūs“, net jei nedeklaruojame. Vadinasi, galima sakyti, kad tai 100% gryna abstrakti klasė.Nebūtinai šis metodas abstrakčiose klasėse bus viešas ir abstraktus. Tai taip pat gali turėti konkrečių metodų.
Ribotas metodų modifikatoriusSąsajos metodo negalima deklaruoti naudojant šiuos modifikatorius:
Vieša: privati ​​ir saugoma
Anotacija: galutinė, statinė, sinchronizuota, gimtoji, griežta.
Abstrakčios klasės kintamojo modifikatoriams nėra jokių apribojimų.
Prieiga prie kintamųjų modifikatoriausSąsajos kintamiesiems leidžiamas prieigos modifikatorius yra viešas, statinis ir galutinis, nesvarbu, ar deklaruojame, ar ne.Abstrakčios klasės kintamieji neturi būti vieši, statiniai, galutiniai.
Apriboti kintamųjų modifikatoriaiSąsajos kintamieji negali būti deklaruojami kaip privatūs, apsaugoti, trumpalaikiai, nepastovūs.Abstraktų klasės kintamųjų modifikatoriams netaikomi jokie apribojimai.
Kintamųjų inicijavimasSąsajos kintamieji turi būti inicijuoti deklaravimo metu.Tai nėra privaloma, kad deklaravimo metu inicializuojami abstraktūs klasės kintamieji.
Egzemplioriai ir statiniai blokaiVidinėje sąsajoje negalite deklaruoti egzemplioriaus ar statinio bloko.Anotacija klasė leidžia egzempliorių ar statinį bloką viduje.
KonstruktoriaiNegalite deklaruoti konstruktoriaus sąsajos viduje.Galite paskelbti konstruktoriumi abstrakčios klasės viduje.


Sąsajos apibrėžimas

„Java“ neleidžia paveldėti daug kartų. Tai yra, viena klasė negali paveldėti daugiau nei vienos klasės vienu metu. To priežastis galima paaiškinti pavyzdžiu. Tarkime, kad mes turime dvi tėvų klases - A ir B bei išvestinę - C klasę. Išvestinė C klasė paveldi ir A, ir B klases.Dabar abu turi A ir B klasių metodus, nustatytus (), tada C klasei bus klausimas, kurį klasės rinkinį () metodas turėtų paveldėti. Šios problemos sprendimas yra „sąsaja“.

Sąsaja yra grynai abstrakti klasė. Sąsajai sukurti naudojamas raktinis žodis yra „sąsaja“. Kadangi visas sąsajos metodas yra visiškai abstraktus. Sąsaja tik nurodo, ką turi daryti klasė, tačiau neapibrėžia, kaip tai daro. Kadangi visi sąsajoje deklaruojami metodai yra abstraktūs, sąsajai nesukuriamas nė vienas egzempliorius. Bendroji „sąsajos“ forma „Java“ yra:

prieigos_specifikatorius sąsaja sąsajos_pavadinimas {grąžinimo tipo metodas-vardas1 (parametrų sąrašas); grąžinimo tipo metodas-vardas2 (parametrų sąrašas); type final-varname1 = reikšmė; type final-varname2 = reikšmė; // ... grąžinimo tipo metodas-vardasN (parametrų sąrašas); type final-varnameN = reikšmė; }

Prieigos specifikacija skelbiama vieša, nes klasėms reikia įdiegti sąsają.


„C ++“ sąvokos sąvokos neturime. Tačiau „Java“ ir „C #“ sąsają apibūdina labai gerai.

„Java“ sąsaja:

  • Sąsajos kintamieji visada yra vieši, statiniai ir galutiniai.
  • Kintamieji turi būti inicijuoti deklaruojant.
  • Kintamieji niekada negali būti paskelbti privačiais, saugomais, trumpalaikiais ir nepastoviais.
  • Sąsajos metodai visada yra vieši ir abstraktūs, tuo tarpu jie niekada negali būti paskelbti kaip privatūs, saugomi, galutiniai, statiniai, sinchronizuoti, vietiniai ir griežti.
  • Negalite deklaruoti jokio konstruktoriaus sąsajos viduje, nes pagrindinis konstruktoriaus tikslas yra klasės kintamųjų inicijavimas, tačiau sąsajoje kintamieji yra inicializuojami jo deklaravimo metu.
  • Sąsaja gali paveldėti kitas sąsajas, tačiau klasė, įgyvendinanti tokią sąsają, turi įgyvendinti visų paveldėtų sąsajų metodus.
  • Klasė gali paveldėti daugiau nei vieną sąsają vienu metu ir ji turi įgyvendinti visus paveldėtų sąsajų metodus.

Bendra sąsajos diegimo „Java“ forma:

klasė klasės_vardas įgyvendina sąsajos_vardas {// klasė-kūnas}

Norėdami paveldėti sąsają, klasė naudoja raktinį žodį „padargai“, o klasė įgyvendina visą metodą, kurį deklaruoja paveldima sąsaja.

Sąsaja C #:

Sąsaja C # yra beveik panaši į „Java“ sąsają, išskyrus:

  • Sąsaja C # nedeklaruoja kintamųjų.
  • Sąsajos pavadinimas rašomas prieš didžiąją raidę I ir paveldimas iš dvitaškio (:) ženklo.

Bendra sąsajos įdiegimo C # forma:

klasė klasės_vardas: sąsajos_vardas {// klasės kūnas}

Abstrakčios klasės apibrėžimas

Klasė, kurioje yra vienas ar keli abstraktūs metodai, vadinama abstrakčia klase, o klasė deklaruojama kaip abstrakčia, naudojant raktinį žodį „abstraktus“, prieš tai klasės deklaracijos pradžioje pateikiant raktinį žodį „klasė“. Kadangi abstrakčiojoje klasėje yra abstrakčiojo metodo, jis reiškia neišsamų tipą. Taigi negalite kurti abstrakčios klasės objektų. Kai klasė paveldi abstrakčią klasę, ji turi įgyvendinti visus abstrakčius klasės metodus, jei to nėra, ji taip pat turi būti paskelbta abstrakčia. Abstraktus požymis paveldimas, kol bus visiškai įgyvendintas abstraktus metodas.

Abstraktiojoje klasėje taip pat gali būti konkrečių metodų, kuriuos išvestinė klasė gali panaudoti tokią, kokia ji yra. Bet jūs negalite deklaruoti abstraktaus konstruktoriaus ar abstraktaus statinio metodo abstrakčios klasės viduje. Bendroji „Java“ abstrakčios klasės forma yra tokia:

abstrakti klasė klasės_vardas {abstraktus metodas_vardas1 (); abstraktus metodas_pavadinimas2 (); : return_type method_name3 (parametro_listas) {// konkretus metodas} return_type method_name4 (parametro_ sąrašas) {// konkretus metodas}};

Abstrakčios klasės sąvoka yra panaši tiek „Java“, tiek „C #“. Abstrakti klasė šiek tiek skiriasi C ++.

Jei klasė bent jau turi vieną virtualią funkciją, C ++ klasėje klasė tampa abstrakčia klase. Vietoj raktinio žodžio „abstraktus“, abstrakčiam metodui deklaruoti naudojamas raktinis žodis „virtualus“.

  1. Kai turite žinių apie „ko reikia“, bet ne apie tai, „kaip tai būtų įgyvendinta“, tada reikia naudoti sąsają. Kita vertus, jei žinote, ko reikia, ir iš dalies žinote, kaip tai bus įgyvendinta, pasinaudokite abstrakčia klase.
  2. Sąsajoje visi metodai yra abstraktūs, tačiau abstrakčioji klasė turi keletą abstrakčių metodų ir keletą konkrečių metodų.
  3. Metodai sąsajos viduje yra vieši ir abstraktūs, todėl ji taip pat vadinama gryna abstrakčia klase. Kita vertus, metodai abstraktavimo metu nėra ribojami viešumo ir yra tik abstraktūs.
  4. Sąsajos metodas niekada negali būti privatus, apsaugotas, galutinis, statinis, sinchronizuotas, vietinis ar griežtas. Kita vertus, abstrakčios klasės metodams nėra jokių apribojimų.
  5. Sąsajos kintamieji yra vieši ir galutiniai, nesvarbu, ar juos deklaruojame, ar ne, tuo tarpu abstrakčios klasės kintamiesiems, kurie būtų vieši ir galutiniai, toks apribojimas netaikomas.
  6. Sąsajos kintamieji niekada negali būti trumpalaikiai ar nepastovūs, tuo tarpu abstrakčios klasės kintamiesiems nėra jokių apribojimų.
  7. Sąsajos kintamasis turi būti inicijuotas deklaravimo metu. Kita vertus, abstrakčios klasės kintamuosius galima bet kada inicijuoti.
  8. Sąsajoje egzemplioriaus ar statinio bloko deklaruoti negalima, tačiau abstrakčios klasės viduje galite deklaruoti egzempliorių ar statinį bloką.
  9. Negalite apibrėžti konstruktoriaus sąsajos viduje, tuo tarpu jūs galite apibrėžti konstruktorių abstrakčios klasės viduje.

Išvada:

Kai jums reikia sukurti pagrindinę klasę, kurioje yra apibendrinta metodų forma, kurią galima pritaikyti išvestinėse klasėse pagal jų poreikį, tai padaryti padeda sąsajos ir abstrakčios klasės samprata.