Hva er forskjellen mellom abstrakt klasse og grensesnitt i Java?



Denne artikkelen vil hjelpe deg med å forstå nøkkelforskjellen mellom abstrakt klasse og grensesnitt i java ved hjelp av et eksempelprogram.

Abstrakte klasser og grensesnitt er de to viktigste byggesteineneav . Selv om begge primært brukes til abstraksjon, er de veldig forskjellige fra hverandre og kan ikke brukes om hverandre. I denne artikkelen skal vi finne ut hva som er forskjellen mellom abstrakt klasse og grensesnitt i Java.

Temaene som er diskutert i denne artikkelen er som følger:





Å forstå forskjellene mellom abstrakt klasse og grensesnitt i , må du vite hva en abstrakt klasse er og hva et grensesnitt er. Så, la oss begynne med å diskutere hva det er.

Hva er abstrakt klasse i Java?

På ethvert programmeringsspråk, abstraksjon betyr å skjule de irrelevante detaljene fra brukeren for kun å fokusere på de essensielle detaljene for å øke effektiviteten og derved redusere kompleksiteten. I Java oppnås abstraksjon ved hjelp av abstrakte klasser . En abstrakt klasse fanger vanlige kjennetegn ved underklasser og inneholder kanskje ikke noen abstrakt metode. Det kan ikke instantieres, men kan bare brukes som en superklasse av underklassene. Her er et eksempel på et program som demonstrerer abstrakt klasse:



Merk: An abstrakt metode , er en metode som ikke er implementert på plass og legger tilufullstendighet til klasse .

pakke MyPackage // abstrakt klasse abstrakt klasse Animal {String AnimalName = '' Animal (String name) {this.AnimalName = name} // erklære ikke-abstrakte metoder // det har standard implementering offentlig ugyldig BasicInfo (strengdetaljer) {System. out.println (this.AnimalName + '' + detaljer)} // abstrakte metoder som vil bli // implementert av underklassen (e) abstrakt offentlig ugyldig habitat () abstrakt offentlig ugyldig respirasjon ()} klasse Terrestrisk utvider 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 gjennom lunger eller luftrør. ')}} klasse Aquatic extensions Animal {// constructor Aquatic (String name) {super (name)} @ Override public void habitat () {System.out.println (' It leaves in water and ') } @Override public void respiration () {System.out.println ('respire through gills or their skin.')}} Class AbstractClassDemo {public static voi d main (String [] args) {// oppretter objektet til terrestrisk klasse // og bruker Animal class reference. Dyrobjekt1 = nytt jordbasert ('Humans') objekt1.BasicInfo ('er terrestriske vesener, de') objekt1.habitat () objekt1.respirasjon () System.out.println ('') // oppretter objekter i sirkelklassen Animal object2 = nye Aquatic ('Fishes') object2.BasicInfo ('er aqautic vesener, de') object2.habitat () object2.respiration ()}}

Produksjon

Mennesker er jordiske vesener, de drar på land og respirerer gjennom lunger eller luftrør. Fiskene er akvatiske vesener, de blir igjen i vann og puster gjennom gjeller eller huden deres.

De Grunnleggende informasjon () er en metode som deles av Jordbasert og Akvatisk klasser. Siden Dyreklasse ikke kan initieres, vi lager objektene til Jordbasert og Akvatisk klasser for programmeringsformål. Neste gang har vi grensesnitt.



Grensesnitt i Java

En annen måte å oppnå abstraksjon i Java er ved å bruke grensesnitt .Et grensesnitt er en samling abstrakte metoder, det har ikke noe konkret , i motsetning til en abstrakt klasse. Men i motsetning til abstrakt klasse, gir et grensesnitt full abstraksjon i Java. Det kan ha både metoder og variabler akkurat som en klasse. Metodene som er angitt i et grensesnitt er imidlertid abstrakte som standard.Her er en demonstrerer abstrakt klasse:

pakke MyPackage-grensesnitt Dyr {// abstrakte metoder ugyldig habitat () ugyldig respirasjon ()} klasse TerrestrialA implementerer Dyr {String AnimalName = '' // konstruktør TerrestrialA (String name) {this.AnimalName = name} @Override public void habitat () {System.out.println (this.AnimalName + 'leave on land and')} @ Override public void respiration () {System.out.println ('respire through lunges or trchea.')}} 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 through gills or their skin.')}} Klasse JavaInterfaceDemo {public static void main (String [] args) {// skape objektet til Terrestrial class // og bruke Animal class reference . Dyr objekt1 = ny TerrestrialA ('Humans') object1.habitat () object1.respiration () System.out.println ('') // oppretter objekter i sirkelklasse Animals object2 = new AquaticA ('Fishes') object2.habitat () object2.respiration ()}}

Produksjon

Mennesker drar på land og respirerer gjennom lunger eller luftrør. Fiskene går i vann og puster ut gjennom gjeller eller huden deres.

Hvis du ikke har noen felles kode mellom klasser , så kan du gå for grensesnittet. Et grensesnitt er mer som en blåkopi av en klasse, siden den ikke har noen ikke-abstrakte metoder.

Fra innholdet ovenfor har du kanskje lagt merke til nøkkelforskjellen mellom abstrakt klasse og grensesnitt i . Som er, i motsetning til abstrakt klasse, gir et grensesnitt fullt abstraksjon i Java. La oss gå videre og liste opp andre forskjeller.

Abstrakt klasse mot grensesnitt

Tabellen nedenfor viser nøkkelforskjellene mellom abstrakt klasse og grensesnitt.

Parameter Abstrakt klasse Grensesnitt

Standard metodeimplementering

Det kan ha standard metode implementering

Grensesnitt gir ren abstraksjon og kan ikke implementeres i det hele tatt

Variabler

Den kan inneholde ikke-endelige variabler.

Variabler deklarert i et grensesnitt er som standard endelige

Nøkkelord brukt

En abstrakt klasse kan utvides ved å bruke nøkkelordet “extends

hva er prosjektinnkjøpsstyring

Grensesnittet skal implementeres ved hjelp av nøkkelord-implementeringer

Få tilgang til modifikatorer

Kanhar offentlig, beskyttet, privat og standardmodifikator

Grensesnittmetoder er som standard offentlige. Du kan ikke bruke noen annen tilgangsmodifikator med den

Implementeringshastighet

Det er raskere enn grensesnittet

Et grensesnitt er noe langsommere og krever ekstra indireksjon

Normal klasse

Den kan bare utvide en abstrakt klasse

Kan implementere flere grensesnitt

Konstruktører

En abstrakt klasse kan ha konstruktører

Et grensesnitt kan ikke ha konstruktører

Flere arv

En abstrakt klasse kan utvide en annen klasse og kan implementere flere Java-grensesnitt

Grensesnittet kan bare utvide et annet Java-grensesnitt

overbelastning og overstyring i java

Vel, nå er du nøkkelforskjellene mellom abstrakt klasse og grensesnitt i Java. Men hvordan bestemmer du når du skal bruke hvilken av disse to?

Når skal jeg bruke abstrakt klasse og når bruke grensesnitt?

Vurder å bruke abstrakte klasser i følgende tilfeller:

  • Hvis du har noen relaterte klasser som må dele samme kodelinjer
  • Når du vil definere ikke-statiske eller ikke-endelige felt
  • Når det ermetoder eller felteller krever tilgangsmodifikatorer annet enn offentlig (for eksempel beskyttet og privat)

Vurder å bruke grensesnitt i følgende tilfeller:

  • Når du vil oppnå ren abstraksjon
  • Hvis du vil ansette flere , dvs,implementere mer enn ett grensesnitt
  • Når du vil spesifisere oppførselen til en bestemt datatype, men ikke bekymret for hvem som implementerer oppførselen.

Dette fører oss til slutten av denne artikkelen. Jeg har dekket et av de ofte stilte Java-spørsmålene i Intervju, som er forskjellen mellom abstrakt klasse og grensesnitt i Java.

Forsikre deg om at du trener så mye som mulig og tilbakestiller opplevelsen.

Sjekk ut av Edureka, et pålitelig online læringsfirma med et nettverk med mer enn 250 000 fornøyde elever spredt over hele verden. Vi er her for å hjelpe deg med hvert trinn på reisen, for å bli en foruten dette java-intervjuspørsmålene, kommer vi med en læreplan som er designet for studenter og fagpersoner som ønsker å være Java-utvikler.

Har du spørsmål til oss? Vennligst nevn det i kommentarfeltet i dette ‘java Map-grensesnittet’ artikkel, og vi kommer tilbake til deg så snart som mulig.