Mis vahe on Java abstraktse klassi ja liidese vahel?



See artikkel aitab teil näidisprogrammi abil mõista peamist erinevust java abstraktse klassi ja liidese vahel.

Abstraktsed klassid ja liidesed on kaks peamist ehituskiviselle . Ehkki mõlemat kasutatakse peamiselt abstraktsiooniks, on nad üksteisest väga erinevad ja neid ei saa kasutada omavahel. Selles artiklis selgitame välja, mis vahe on Java abstraktsel klassil ja liidesel.

Selles artiklis käsitletavad teemad on järgmised:





Et mõista erinevusi abstraktse klassi ja liidese vahel , peate teadma, mis on abstraktne klass ja mis on liides. Alustame siis sellest, mis need on.

Mis on Java abstraktne klass?

Mis tahes programmeerimiskeeles abstraktsioon tähendab ebaoluliste detailide varjamist kasutaja eest, et keskenduda tõhususe suurendamiseks ainult olulistele detailidele, vähendades seeläbi keerukust. Java-s saavutatakse abstraktsioon kasutades abstraktsed klassid . Abstraktne klass hõlmab alamklasside ühiseid omadusi ja võib sisaldada abstraktset meetodit või mitte. Seda ei saa instantsida, vaid seda saab kasutada ainult superklassina selle alaklasside kaupa. Siin on näidisprogramm, mis näitab abstraktset klassi:



Märge: An abstraktne meetod , on meetod, mida pole rakendatud ja lisabpuudulikkus klass .

meetodi ülekoormamine ja ületamine Java näites
pakett MyPackage // abstraktne klass abstraktne klass Loom {String AnimalName = ''Loom (Stringi nimi) {this.AnimalName = nimi} // deklareerib mitte-abstraktsed meetodid // sellel on vaikimisi juurutamine public void BasicInfo (Stringi üksikasjad) {System. out.println (this.AnimalName + '' + detailid)} // abstraktsed meetodid, mida // rakendavad selle alaklass (id) abstraktne avalik tühi elupaik () abstraktne avalik tühine hingamine ()} klass Maapealne laiendab looma {// konstruktor Terrestrial (stringi nimi) {super (nimi)} @Orride public void habitat () {System.out.println ('jäta maale ja')} @Override public void-hingamine () {System.out.println ('respire läbi kopsude või hingetoru. ')}} klass Veepikendused ulatuvad looma {// konstruktor veekeskkond (stringinimi) {super (nimi)} @Orride public void habitat () {System.out.println (' See lahkub veest ja ') } @Orride public void respiration () {System.out.println ('hingake läbi lõpuste või nende naha.')}} Klass AbstractClassDemo {public static voi d main (String [] args) {// maapealse klassi objekti loomine // ja loomaklassi viite kasutamine. Loomaobjekt1 = uus maapealne ('Inimesed') objekt1.BasicInfo ('on maapealsed olendid, nemad') object1.habitat () object1.respiration () System.out.println ('') // looma ringklassi Animal objektid object2 = uus veekeskkond ('Fishes') object2.BasicInfo ('nad on vesised olendid') object2.habitat () object2.hingamine ()}}

Väljund

Inimesed on maapealsed olendid, nad lahkuvad maalt ja hingavad kopsude või hingetoru kaudu. Kalad on veeolendid, nad jätavad vette ja hingavad lõpuste või naha kaudu.

The BasicInfo () on meetod, mida jagab Maapealne ja Veekeskkond klassides. Kuna Loomaklass ei saa algatada, loome objektid Maapealne ja Veekeskkond klassid programmeerimise eesmärgil. Järgmisena on meil liidesed.



Liides Java-s

Teine viis saavutamiseks abstraktsioon Java on kasutades liidesed .Liides on abstraktsete meetodite kogum, sellel pole konkreetset , erinevalt abstraktsest klassist. Kuid erinevalt abstraktsest klassist pakub liides Java-s täieliku abstraktsiooni. Sellel võib olla nii meetodeid kui ka muutujaid nagu klassil. Liideses deklareeritud meetodid on vaikimisi siiski abstraktsed.Siin on abstraktse klassi demonstreerimine:

pakett MyPackage'i liides Loomad {// abstraktsed meetodid void habitat () void respiration ()} klass TerrestrialA rakendab loomi {String AnimalName = '' // konstruktor TerrestrialA (stringi nimi) {this.AnimalName = nimi} @Ava avalik tühine elupaik () {System.out.println (this.AnimalName + 'leave on land and')} @Orride public void hingamine () {System.out.println ('hingake kopsude või hingetoru kaudu.')}}} Klass AquaticA rakendab loomi {string AnimalName = '' // konstruktor AquaticA (Stringi nimi) {this.AnimalName = name} @Orride public void habitat () {System.out.println (this.AnimalName + 'leave in water and')} @Override public void hingamine () {System.out.println ('hingake läbi lõpuste või nende naha.')}} Klass JavaInterfaceDemo {public static void main (String [] args) {// maapealse klassi objekti loomine // ja loomaklassi viite kasutamine . Loomad object1 = new TerrestrialA ('Inimesed') object1.habitat () object1.respiration () System.out.println ('') // vooru klassi loomade objektide loomine object2 = uus AquaticA ('Fishes') object2.habitat () objekt2.hingamine ()}}

Väljund

Inimesed lahkuvad maalt ja hingavad kopsude või hingetoru kaudu. Kalad lahkuvad veest ja hingavad lõpuste või naha kaudu.

Kui teil pole oma koodi vahel ühist koodi klassides , siis võite minna liidesele. Liides sarnaneb pigem klassi kavandiga, kuna sellel pole ühtegi abstraktset meetodit.

Ülaltoodud sisust võisite märgata peamist erinevust abstraktse klassi ja liidese vahel . Mis tähendab, et erinevalt abstraktsest klassist pakub liides täielikku abstraktsioon Java keeles. Nüüd jätkame ja loetleme muud erinevused.

Abstraktne klass vs liides

Allolevas tabelis on loetletud abstraktse klassi ja liidese peamised erinevused.

Parameeter Abstraktne klass Liides

Vaikemeetodi rakendamine

Sellel võib olla vaikemeetodi rakendamine

Liidesed pakuvad puhast abstraktsiooni ja neid ei saa üldse rakendada

Muutujad

See võib sisaldada mitte-lõplikke muutujaid.

Liideses deklareeritud muutujad on vaikimisi lõplikud

Märksõna kasutatud

Abstraktset klassi saab laiendada, kasutades märksõna „pikendab

Liides tuleb rakendada märksõnarakenduste abil

Juurdepääsu modifikaatorid

Saabteil on avalik, kaitstud, privaatne ja vaikimisi modifikaator

Liidese meetodid on vaikimisi avalikud. sellega ei saa te ühtegi muud juurdepääsu modifikaatorit kasutada

Rakendamise kiirus

See on kiirem kui liides

Liides on mõnevõrra aeglasem ja nõuab täiendavat otsesuunavust

Normaalne klass

See võib laiendada ainult ühte abstraktset klassi

Oskab rakendada mitut liidest

Konstruktorid

Abstraktsel klassil võivad olla konstruktorid

Liidesel ei tohi olla konstruktoreid

Mitmekordne pärand

Abstraktne klass võib laiendada teist klassi ja rakendada mitut Java-liidest

Liides saab laiendada ainult mõnda muud Java-liidest

Nüüd, peamised erinevused abstraktse klassi ja Java-liidese vahel. Kuidas aga otsustada, millist neist kahest kasutada?

Millal kasutada abstraktset klassi ja millal liidest?

Kaaluge abstraktsete klasside kasutamist järgmistel juhtudel:

  • Kui teil on mõnda seotud klassi, mis peavad seda jagama samad koodiread
  • Kui soovite määratleda mittestaatilised või mitte-lõplikud väljad
  • Kui neid onmeetodid või väljadvõi nõuda juurdepääsu modifikaatorid muud kui avalikud (näiteks kaitstud ja privaatsed)

Kaaluge liideste kasutamist järgmistel juhtudel:

  • Kui soovite saavutada puhas abstraktsioon
  • Kui soovite tööle panna mitmekordne , strakendada rohkem kui ühte liidest
  • Kui soovite täpsustada konkreetse andmetüübi käitumist, kuid pole mures selle pärast, kes selle käitumist rakendab.

See viib meid selle artikli lõppu. Olen intervjuus käsitlenud ühte kõige sagedamini küsitavat Java-küsimust, mis on erinevus abstraktse klassi ja Java-liidese vahel.

Harjutage kindlasti nii palju kui võimalik ja pöörake oma kogemused tagasi.

Vaadake Edureka, usaldusväärne veebiõppeettevõte, mille võrgustik hõlmab üle 250 000 rahuloleva õppija, levinud üle kogu maailma. Oleme siin, et aidata teil igal sammul teie teekonnal, et saada lisaks sellele Java-intervjuu küsimustele välja, pakume välja õppekava, mis on mõeldud õpilastele ja spetsialistidele, kes soovivad olla Java-arendajad.

Kas teil on meile küsimus? Palun mainige seda selle java Mapi liidese kommentaaride jaotises artikli ja võtame teiega ühendust niipea kui võimalik.