Erinevus Java abstraktse klassi ja liidese vahel

Abstraktseid klasse ja liideseid kasutatakse peamiselt abstraktsioonide saamiseks, kuid need on üksteisest väga erinevad. Mõlemad on Java põhiosa, kuid neil on oma rakenduste kasutused. Ehkki mõlemad terminid võivad olla üksteisega sünonüümid, ei saa neid kasutada vaheldumisi.

Nende kahe vahel on olulisi erinevusi. Kuigi liidese meetod on vaikimisi abstraktne, võib abstrakt sisaldada nii abstraktseid kui ka mitteabstraktseid meetodeid. Noh, alates Java 8-st on liidestel ka meetodite juurutamine ja Java-s võivad neil olla nii staatilised kui ka vaikimisi meetodid. Uurime üksikasjalikult nende kahe erinevust.

Mis on Java abstraktne klass?

Java abstraktne klass on klass, mis kuulutatakse abstraktseks - see võib sisaldada või mitte sisaldada abstraktseid meetodeid. See on üsna sarnane Java-liidesega, välja arvatud asjaolu, et see võib sisaldada vaikemeetodi rakendamist. Nagu objektorienteeritud programmeerimisel, saavutatakse ka Java abstraktsioon abstraktsete klasside ja liideste abil. Java keeles tähendab abstraktsioon kasutaja jaoks ebaoluliste detailide peitmist, et keskenduda ainult olulistele detailidele, et suurendada tõhusust, vähendades seeläbi keerukust. Märksõna “abstraktne” kasutatakse abstraktse klassi loomiseks vahetult enne klassi märksõna klassideklaratsioonis.

Abstraktne klass võib sisaldada või mitte sisaldada abstraktsioonimeetodeid (meetodid ilma kehata), kuid kui klassil on vähemalt üks abstraktsioonimeetod, tuleb see tunnistada abstraktseks. Mitteabstraktseid meetodeid saab kasutada ka ainult abstraktses klassis, kuid ainult vaikekäitumise rakendamiseks. Abstraktse klassi meetoditel võivad olla juurdepääsu modifikaatorid, näiteks privaatsed, avalikud, staatilised ja kaitstud, sõltuvalt nähtavuse tasemest. Abstraktset klassi ei saa kiirendada ja see ei taga 100-protsendilist abstraktsiooni, kuna sellel võib olla konkreetne meetod.

Mis on liides?

Ehkki liides näeb välja nagu klass, pole seda. Kuna Java ei toeta mitut pärimist, on mõnikord liides klass hierarhia jaoks aluse loomiseks ideaalne. Liides on rohkem klassi plaan, mida kasutatakse ka Java abstraktsioonide saavutamiseks. See sisaldab abstraktseid meetodeid ja staatilisi konstante. Lihtsamalt öeldes on liides abstraktsete meetodite kogum, mida kasutatakse käitumise täpsustamiseks, mida klass peab rakendama. Erinevalt abstraktsest klassist pakub liides Java täielikku abstraktsiooni. Sellel võivad olla nii meetodid kui ka muutujad nagu klassil, kuid liideses deklareeritud meetodid on vaikimisi abstraktsed.

Erinevus Java abstraktse klassi ja liidese vahel

  1. Java abstraktse klassi ja liidese „mitu pärimist” - Hoolimata asjaolust, et abstraktsioonideks kasutatakse peamiselt nii abstraktset klassi kui ka liidest, on nad üksteisest üsna erinevad. Kui abstraktne klass on klass, siis liides on liides. See tähendab, et kui liides võib laiendada ainult mõnda muud Java-liidest, saab abstraktne klass Java-is rakendada mitmeid pärandusi. Noh, Java ei toeta mitut pärandit, kuid Java saab rakendada mitu pärandit.
  2. „Meetodi tüüp” abstraktne klass ja liides Java-s - Teine peamine erinevus nende kahe vahel on see, et kuigi liidesel võib olla ainult abstraktseid meetodeid, võib abstraktses klassis olla nii abstraktseid kui ka mitteabstraktseid meetodeid. Alates Java 8-st võib liidesel olla ka vaikimisi ja staatilisi meetodeid.
  3. Java abstraktse klassi ja liidese „juurdepääsu modifikaatorid” - Abstraktsel klassil võivad olla avalikud, privaatsed ja kaitstud juurdepääsu modifikaatorid, kuid liidese meetodid on kaudselt avalikud ja abstraktsed. Liidese meetoditega ei saa te muud juurdepääsu modifikaatorit kasutada ”.
  4. Abstraktse klassi ja liidese "rakendamine" Java-s - Abstraktne klass võib pakkuda liidese rakendamist. Liides seevastu ei saa pakkuda abstraktse klassi rakendamist.
  5. Java abstraktse klassi ja liidese "märksõna"- Ehkki abstraktset klassimeetodit abstraktseks kuulutamiseks kasutatakse märksõna „abstraktne”, on liidesed siiski täiesti erinev lugu; neil võivad olla ainult avalikud, staatilised lõplikud konstandid ja meetodideklaratsioonid.
  6. Abstraktse klassi ja liidese kasutamine Java-s - Ehkki liides on tüübi deklareerimiseks ideaalne, sobib koodi korduvkasutatavuse ja arenguperspektiivi jaoks kõige paremini abstraktne klass. Liides näeb välja nagu klass, kuid see pole klass.
  7. Java abstraktse klassi ja liidese "usaldusväärsus"- Veel üks suur erinevus abstraktse klassi ja liidese vahel on see, et esimene on natuke kiirem kui viimane, kuna tavaliselt on liideses otsing enne kui Java-s kutsutakse üles mõni ülepakutud meetod..
  8. Java abstraktse klassi ja liidese „lõplikud muutujad” - Liideses deklareeritud muutujad on vaikimisi lõplikud, samas kui abstraktne klass ei pruugi sisaldada mitte lõplikke muutujaid.

Abstraktne klass vs Java-liides: võrdlustabel

Abstraktne klass Liides
Abstraktset märksõna kasutatakse abstraktse klassi loomiseks ja seda saab kasutada meetoditega. Liidese loomiseks kasutatakse liidese märksõna, kuid seda ei saa meetoditega kasutada.
Klass võib laiendada ainult ühte abstraktset klassi. Klass saab rakendada rohkem kui ühte liidest.
Abstraktsel klassil võivad olla nii abstraktsed kui ka mitteabstraktsed meetodid. Liidesel võib olla ainult abstraktseid meetodeid.
Muutujad pole vaikimisi lõplikud. See võib sisaldada mitte-lõplikke muutujaid. Muutujad on liideses vaikimisi lõplikud.
Abstraktne klass võib pakkuda liidese rakendamist. Liides ei saa pakkuda abstraktse klassi rakendamist.
Sellel võib olla meetodeid koos rakendustega. See pakub absoluutset abstraktsiooni ja sellel ei saa olla meetodi rakendusi.
Sellel võivad olla avalikud, privaatsed, staatilised ja kaitstud juurdepääsu modifikaatorid. Meetodid on Java-liideses kaudselt avalikud ja abstraktsed.
See ei toeta mitut pärimist. See toetab mitut pärandit.
See on ideaalne koodi korduvkasutuse ja evolutsiooni perspektiivi jaoks. See sobib ideaalselt tüübi deklareerimiseks.

Kokkuvõtlikud punktid Java abstraktse klassi ja liidese kohta

Abstraktsiooniks kasutatakse nii abstraktset klassi kui ka liidest; siiski on neil erinevustest õiglane osa. Peamine erinevus nende kahe vahel on tingitud abstraktsioonimeetoditest. Ehkki esimesel võib olla abstraktseid meetodeid või mitte, on viimane kaudselt abstraktne. Abstraktsel klassil võivad olla nii abstraktsed kui ka mitteabstraktsed meetodid. Teisest küljest võivad liidesed omada ainult abstraktseid meetodeid, seega ei saa neid rakendada, mis tähendab lihtsalt seda, et liidesel ei saa olla mitteabstraktseid meetodeid. Abstraktset klassi ei saa realiseerida, mis keelab objekti loomise. Liides seevastu võib tunduda klass, kuid see pole nii.