Hvad er forskellen mellem abstrakt klasse og interface i Java?



Denne artikel hjælper dig med at forstå nøgleforskellen mellem abstrakt klasse og interface i java ved hjælp af et eksempelprogram.

Abstrakte klasser og grænseflader er de to vigtigste byggestenaf . Selvom begge primært bruges til abstraktion, er de meget forskellige fra hinanden og kan ikke bruges om hinanden. I denne artikel skal vi finde ud af, hvad der er forskellen mellem abstrakt klasse og interface i Java.

Emner diskuteret i denne artikel er som følger:





At forstå forskellene mellem abstrakt klasse og interface i , skal du vide, hvad en abstrakt klasse er, og hvad en grænseflade er. Så lad os starte med at diskutere, hvad det er.

Hvad er abstrakt klasse i Java?

På ethvert programmeringssprog, abstraktion betyder at skjule de irrelevante detaljer for brugeren for kun at fokusere på de væsentlige detaljer for at øge effektiviteten og derved reducere kompleksiteten. I Java opnås abstraktion ved hjælp af abstrakte klasser . En abstrakt klasse fanger fælles karakteristika for underklasser og kan eller ikke indeholde nogen abstrakt metode. Det kan ikke instantieres, men kan kun bruges som en superklasse af dets underklasser. Her er et eksempel på et program, der demonstrerer abstrakt klasse:



Bemærk: En abstrakt metode , er en metode, der ikke er implementeret på plads og tilføjerufuldstændighed til klasse .

pakke MyPackage // abstrakt klasse abstrakt klasse Animal {String AnimalName = '' Animal (String name) {this.AnimalName = name} // erklær ikke-abstrakte metoder // den har standardimplementering offentlig ugyldig BasicInfo (strengdetaljer) {System. out.println (this.AnimalName + '' + detaljer)} // abstrakte metoder, der vil blive // ​​implementeret af dens underklasse (r) abstrakt offentlig ugyldig habitat () abstrakt offentlig ugyldig åndedræt ()} klasse Terrestrisk udvider dyr {// constructor Terrestrial (String name) {super (name)} @ Override public void habitat () {System.out.println ('leave on land and')} @ Override public void respiration () {System.out.println ('respire gennem lunger eller luftrør. ')}} klasse Aquatic extends Animal {// constructor Aquatic (String name) {super (name)} @ Override public void habitat () {System.out.println (' Det efterlader i vand og ') } @Override åndedrætsværktøj () {System.out.println ('respire gennem gæller eller deres hud.')}} Klasse AbstractClassDemo {public static voi d main (String [] args) {// oprettelse af objektet til jordbaseret klasse // og anvendelse af Animal class reference. Dyreobjekt1 = nyt jordbaseret ('Humans') objekt1.BasicInfo ('er jordiske væsener, de') objekt1.habitat () objekt1.respiration () System.out.println ('') // oprettelse af objekter i cirkelklasse Dyr object2 = nyt Aquatic ('Fishes') objekt2.BasicInfo ('er aqautic væsener, de') object2.habitat () object2.respiration ()}}

Produktion

Mennesker er jordiske væsener, de forlader på land og respirerer gennem lunger eller luftrør. Fisk er aqautic væsener, de Det efterlader i vand og respirere gennem gæller eller deres hud.

Det BasicInfo () er en metode, der deles af Jordbaseret og Akvatisk klasser. Siden Dyreklasse ikke kan initieres, skaber vi objekterne til Jordbaseret og Akvatisk klasser til programmeringsformål. Derefter har vi grænseflader.



Interface i Java

En anden måde at opnå abstraktion i Java er ved hjælp af grænseflader .En grænseflade er en samling af abstrakte metoder, den har ikke noget konkret i modsætning til en abstrakt klasse. Men i modsætning til abstrakt klasse giver en grænseflade fuld abstraktion i Java. Det kan have både metoder og variabler ligesom en klasse. Metoderne, der er angivet i en grænseflade, er som standard abstrakte.Her er en demonstrerer abstrakt klasse:

pakke MyPackage-interface Dyr {// abstrakte metoder ugyldig habitat () ugyldig respiration ()} klasse TerrestrialA implementerer Dyr {String AnimalName = '' // konstruktør TerrestrialA (String name) {this.AnimalName = name} @Override public ugyldig habitat () {System.out.println (this.AnimalName + 'leave on land and')} @ Override public void respiration () {System.out.println ('respire through lunges or trachea.')}} Klasse AquaticA implementerer dyr {String AnimalName = '' // konstruktør AquaticA (strengnavn) {this.AnimalName = name} @Override public void habitat () {System.out.println (this.AnimalName + 'leave in water and')} @Override public void respiration () {System.out.println ('respire gennem gæller eller deres hud.')}} Klasse JavaInterfaceDemo {public static void main (String [] args) {// Oprettelse af objektet til Terrestrial class // og brug af Animal class reference . Dyr objekt1 = nyt TerrestrialA ('Mennesker') objekt1.habitat () objekt1.respiration () System.out.println ('') // oprettelse af objekter i cirkelklasse Dyr objekt2 = nyt AquaticA ('Fisk') objekt2.habitat () objekt2.respiration ()}}

Produktion

Mennesker rejser på land og respirerer gennem lunger eller luftrør. Fisk efterlades i vand og trækker vejret gennem gæller eller deres hud.

Hvis du ikke har nogen fælles kode mellem din klasser , så kan du gå til grænsefladen. En grænseflade er mere som en tegning af en klasse, da den ikke har nogen ikke-abstrakte metoder.

Fra ovenstående indhold har du måske bemærket nøgleforskellen mellem abstrakt klasse og interface i . Hvilket er, i modsætning til abstrakt klasse, giver en grænseflade fuld abstraktion i Java. Lad os nu gå videre og liste andre forskelle.

Abstrakt klasse vs grænseflade

Tabellen nedenfor viser de vigtigste forskelle mellem abstrakt klasse og interface.

Parameter Abstrakt klasse Interface

Standardmetode Implementering

Det kan have implementering af standardmetoden

Grænseflader giver ren abstraktion og kan slet ikke have implementering

Variabler

Det kan indeholde ikke-endelige variabler.

Variabler, der er erklæret i en grænseflade, er som standard endelige

sorteringsfunktion c ++ array

Nøgleord brugt

En abstrakt klasse kan udvides ved hjælp af nøgleordet “udvider

Interfacet skal implementeres ved hjælp af nøgleordets implementeringer

Adgang modifikatorer

Kanhar offentlig, beskyttet, privat og standardmodifikator

Interface-metoder er som standard offentlige. du kan ikke bruge nogen anden adgangsmodifikator med det

Implementeringshastighed

Det er hurtigere end grænsefladen

En grænseflade er noget langsommere og kræver ekstra indirektion

Normal klasse

Det kan kun udvide en abstrakt klasse

Kan implementere flere grænseflader

Konstruktører

En abstrakt klasse kan have konstruktører

En grænseflade kan ikke have konstruktører

Flere arv

En abstrakt klasse kan udvide en anden klasse og kan implementere flere Java-grænseflader

Interfacet kan kun udvide en anden Java-grænseflade

Nå, nu er du de vigtigste forskelle mellem abstrakt klasse og interface i Java. Men hvordan beslutter du, hvornår du skal bruge en af ​​disse to?

Hvornår skal man bruge abstrakt klasse og hvornår skal man bruge interface?

Overvej at bruge abstrakte klasser i følgende tilfælde:

  • Hvis du har nogle relaterede klasser, der skal dele samme kodelinjer
  • Når du vil definere ikke-statiske eller ikke-endelige felter
  • Når der ermetoder eller feltereller kræve adgangsmodifikatorer andet end offentligt (såsom beskyttet og privat)

Overvej at bruge grænseflader i følgende tilfælde:

  • Når du vil opnå ren abstraktion
  • Hvis du vil ansætte mange , dvs.implementere mere end en grænseflade
  • Når du vil specificere en bestemt datatypes opførsel, men ikke bekymret for, hvem der implementerer dens adfærd.

Dette bringer os til slutningen af ​​denne artikel. Jeg har dækket et af de hyppigst stillede Java-spørgsmål i Interview, som er forskellen mellem abstrakt klasse og interface i Java.

Sørg for at øve så meget som muligt, og vend din oplevelse tilbage.

Tjek den af Edureka, et pålideligt online læringsfirma med et netværk på mere end 250.000 tilfredse elever spredt over hele kloden. Vi er her for at hjælpe dig med hvert trin på din rejse, for at blive et ud over dette java-interviewspørgsmål, kommer vi med en læseplan, der er designet til studerende og fagfolk, der ønsker at være Java-udvikler.

Har du et spørgsmål til os? Nævn det i kommentarfeltet i denne 'java Map interface' artikel, og vi vender tilbage til dig så hurtigt som muligt.