Rekomenduojama, 2024

Redaktoriaus Pasirinkimas

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

„Interface“ ir „Abstract Abstract“ klasės „OOP“ prisideda prie „nebaigto tipo“. Kartais reikia „superklasės“, kad apibrėžtume „ką daryti“, bet ne „kaip tai padaryti“, tai, kaip atlikti dalį bus įgyvendinta išvestinė klasė, atsižvelgiant į jos poreikį, „ sąsaja “ yra sprendimo būdas. Kartais mums reikia superklasės klasės, kuri apibrėžia tam tikrą apibendrintą struktūrą, kuri gali būti įgyvendinama pagal išvestines klases ir tam tikrą apibrėžtą struktūrą, kuri gali būti naudojama išvestoms klasėms, „ abstrakta klasė “ - tai sprendimas. Pagrindinis skirtumas tarp sąsajos ir abstrakčios klasės yra tai, kad sąsaja yra visiškai neišsami ir abstrakta klasė yra iš dalies neišsami.

Palyginimo diagrama

Palyginimo pagrindasSąsajaAnotacija klasė
PagrindinisKai tik turite žinių apie reikalavimus, o ne apie jos įgyvendinimą, naudokite „sąsają“.Kai iš dalies žinote apie panaudotas „Anotacijos klases“.
MetodaiSąsajoje yra tik abstrakčių metodų.Anotacija klasė apima abstrakčius metodus ir konkrečius metodus.
Prieigos modifikatorius metodamsSąsajos metodai visada yra „vieši“ ir „abstraktūs“, net jei nepranešime. Taigi, tai gali būti sakoma kaip 100%, grynai abstrakta klasė.Tai nėra privaloma, kad abstrakčios klasės metodas bus viešas ir abstraktus. Jis taip pat gali turėti konkrečių metodų.
Apribotas modifikatorius metodamsNegalima deklaruoti sąsajos metodo su šiais modifikatoriais:
Vieša: privati ​​ir saugoma
Anotacija: galutinis, statinis, sinchronizuotas, gimtoji, griežta.
Abstrakčios klasės kintamojo modifikatoriams nėra jokių apribojimų.
Kintamųjų prieigos modifikatorius„Acess Modifier“ leidžiama sąsajos kintamiesiems yra vieši, statiniai ir galutiniai, ar deklaruojame, ar ne.Abstrakčios klasės kintamieji neturi būti vieši, statiniai, galutiniai.
Ribotieji kintamųjų modifikatoriaiSąsajos kintamieji negali būti deklaruojami kaip privatūs, saugomi, laikini, nepastovi.Abstrakčių klasių kintamųjų modifikatorių nėra.
Kintamųjų inicijavimasSąsajos kintamieji turi būti inicijuoti deklaracijos pateikimo metu.Nebūtina, kad abstrakčių klasių kintamieji turi būti inicijuoti deklaracijos pateikimo metu.
Pavyzdys ir statiniai blokaiVidinė sąsaja, jūs negalite deklaruoti egzemplioriaus ar statinio bloko.Anotacija klasė leidžia egzemplioriaus ar statinio bloko viduje.
KonstruktoriaiJūs negalite deklaruoti konstruktoriaus sąsajos.Konstruktorių galite pasakyti abstrakčiai klasei.

Sąsajos apibrėžtis

„Java“ neleidžia daugkartinio paveldėjimo. Tai reiškia, kad viena klasė vienu metu negali paveldėti daugiau nei vienos klasės. To priežastis gali būti paaiškinta pavyzdžiu. Tarkime, mes turime dvi pagrindines klases: A ir B ir išvestinę C klasę. Išvestinė C klasė paveldi ir A, ir B klases. Dabar abu yra A ir B klasės metodai (), tada tai bus klausimas C klasei, kurios klasės () metodas turėtų būti paveldėtas. Šios problemos sprendimas yra „sąsaja“.

Sąsaja yra gryna abstrakta klasė. Raktažodis, naudojamas sąsajai sukurti, yra „sąsaja“. Kadangi visas sąsajos metodas yra visiškai abstraktus. Sąsaja tik nurodo, ką klasė turi daryti, tačiau ji neapibrėžia, kaip tai daro. Tiesiog todėl, kad visas sąsajoje deklaruotas metodas yra abstraktus, sąsajai nėra sukurtas pavyzdys. Bendra „sąsajos“ forma java yra:

 access_specifier sąsajos sąsajos_name {grąžinimo tipo metodas-pavadinimas1 (parametrų sąrašas); grąžinimo tipo metodo pavadinimas2 (parametrų sąrašas); tipas final-varname1 = vertė; tipas final-varname2 = vertė; // ... grąžinimo tipo metodas-pavadinimasN (parametrų sąrašas); tipas final-varnameN = vertė; } 

Prieigos specifikatorius skelbiamas viešai, nes klasės turi įdiegti sąsają.

„C ++“ neturime „sąsajos“ sąvokos. Tačiau „Java“ ir „C #“ labai gerai apibrėžia sąsają.

„Java“ sąsaja:

  • Sąsajos kintamieji visada yra vieši, statiniai ir galutiniai.
  • Kintamieji turi būti inicijuoti deklaracijos pateikimo metu.
  • Kintamieji niekada negali būti paskelbti privačiais, saugomais, laikinais ir nepastoviais.
  • Sąsajos metodai visada yra vieši ir abstrakčiai, tačiau jie niekada negali būti paskelbti kaip privatūs, saugomi, galutiniai, statiniai, sinchronizuoti, gimtoji ir griežta.
  • Jūs negalite deklaruoti jokio konstruktoriaus vidinės sąsajos, nes pagrindinis konstruktoriaus tikslas yra klasių kintamųjų inicijavimas, bet sąsajos kintamieji inicijuojami deklaracijos pateikimo 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ė vienu metu gali paveldėti daugiau nei vieną sąsają, ir ji turi įgyvendinti visus visų paveldėtų sąsajų metodus.

Bendra sąsajos įgyvendinimo Java forma:

 klasės klasės_vardas įgyvendina sąsajos_numerį {// class-body} 

Norint paveldėti sąsają, klasė naudoja raktinį žodį „įdiegia“, o klasė įgyvendina visą paveldėto sąsajos deklaruotą metodą.

Sąsaja C #:

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

  • Sąsaja C # nepareiškia kintamųjų.
  • Sąsajos pavadinimas yra pridedamas prie sostinės I ir yra paveldėtas dvitaškio (:) ženklu.

Bendra „C #“ sąsajos įgyvendinimo forma:

 klasės klasės_pavadinimas: sąsajos pavadinimas {// class-body} 

Anotacijos klasės apibrėžimas

Klasė, kurioje yra vienas ar daugiau abstrakčių metodų, vadinama abstrakčia klasė, o klasė paskelbiama abstrakčia, naudojant raktinį žodį „abstraktus“, prieš kurį klasių deklaracijos pradžioje yra „klasės“ raktinis žodis. Kadangi abstraktajai klasei yra abstraktus metodas, jis yra neišsamus. Taigi, negalite sukurti abstrakčios klasės objektų. Kai klasė paveldi abstrakčią klasę, ji turi įgyvendinti visus abstrakčius abstrakčios klasės metodus, jei tai nėra, tada ji taip pat turi būti paskelbta abstrakčia.

Abstrakta klasė taip pat gali apimti konkrečius metodus, kuriuos išvestinė klasė gali panaudoti taip, kaip ji yra. Tačiau abstrakčios klasės viduje negalite deklaruoti abstrakčios konstruktoriaus ar abstrakčios statinės metodikos. Bendra abstrakčios klasės „Java“ forma yra tokia:

 abstrakčios klasės klasės_pavadinimas {abstraktus metodas_ vardas1 (); abstraktus metodas_ vardas2 (); : return_type method_name3 (parametrų sąrašas) {// konkretus metodas} return_type method_name4 (parametras_list) {// konkretus metodas}}; 

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

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

Pagrindiniai skirtumai tarp sąsajos ir abstrakčios klasės „Java“ ir „C“

  1. Kai turite žinių apie tai, kas reikalinga, bet ne „kaip ji bus įgyvendinta“, reikia naudoti sąsają. Kita vertus, jei žinote, ko reikia ir iš dalies žinote, kaip ji bus įgyvendinta, naudokite abstrakčią klasę.
  2. Sąsaja turi visus metodus abstrakčiai, bet abstrakčiai klasei būdingi abstrakčiai metodai ir kai kurie konkretūs metodai.
  3. Sąsajoje esantys metodai yra vieši ir abstrakčiai, todėl jie taip pat vadinami grynai abstrakčia klase. Kita vertus, santraukos viduje esantys metodai neapsiriboja tik viešais ir abstrakčiais.
  4. Sąsajos metodas niekada negali būti privatus, apsaugotas, galutinis, statinis, sinchronizuotas, gimtoji ar griežta. 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, o abstrakčios klasės kintamiesiems toks apribojimas nėra tik viešas ir galutinis.
  6. Kintamieji sąsajoje niekada negali būti privatūs, laikini arba nepastovūs, o abstrakčios klasės kintamiesiems nėra jokių apribojimų.
  7. Deklaracijos metu sąsajos kintamasis turi būti inicijuotas. Kita vertus, abstrakčios klasės kintamieji gali būti inicijuoti bet kuriuo metu.
  8. Sąsajos viduje negalima deklaruoti egzemplioriaus ar statinio bloko, tačiau galite pasakyti, kad egzempliorius ar statinis blokas yra abstrakčios klasės viduje.
  9. Jūs negalite apibrėžti konstruktoriaus sąsajos viduje, o jūs galite apibrėžti konstruktorių abstrakčios klasės viduje.

Išvada:

Kai jums reikia sukurti bazinę klasę, kurioje yra apibendrinta metodų forma, kurią gali įgyvendinti išvestinės klasės pagal jų poreikį, tai daro sąsajos ir abstrakčios klasės sąvoka.

Top