Forskjellen mellom abstrakt klasse og grensesnitt i Java

Abstrakt klasse og grensesnitt begge brukes primært til abstraksjon, men de er veldig forskjellige fra hverandre. Begge er kjernefelt av Java, men har egen bruk. Selv om begge begrepene kan være synonymt med hverandre, kan de ikke brukes om hverandre.

Det er betydelige forskjeller mellom de to. Mens en grensesnittmetode er abstrakt som standard, kan et abstrakt inneholde både abstrakte og ikke-abstrakte metoder. Vel, siden Java 8, grensesnitt har også metodeimplementeringer, og de kan ha både statiske og standardmetoder i Java. La oss studere forskjellen mellom de to i detalj.

Hva er en abstrakt klasse i Java?

En abstrakt klasse i Java er en klasse som er erklært abstrakt - det kan eller ikke inneholder abstrakte metoder. Det ligner på et Java-grensesnitt, bortsett fra det faktum at det kan inneholde standardmetodeimplementering. Som i objektorientert programmering oppnås abstraksjon i Java ved hjelp av abstrakte klasser og grensesnitt. I Java betyr abstraksjon å gjemme de irrelevante detaljene fra brukeren for å fokusere bare på de essensielle detaljene for å øke effektiviteten og dermed redusere kompleksiteten. Søkeordet "abstrakt" brukes til å lage en abstrakt klasse like før klassesøkeordet i klassedeklarasjonen.

En abstrakt klasse kan eller ikke inneholde abstraksjonsmetoder (metoder uten kropp), men hvis en klasse har minst en abstraksjonsmetode, må den deklareres abstrakt. Imidlertid kan ikke-abstrakte metoder bare brukes i en abstrakt klasse, men bare for å implementere standardadferd. Metodene i en abstrakt klasse kan ha tilgangsmodifikatorer som privat, offentlig, statisk og beskyttet, avhengig av synlighetsnivå. En abstrakt klasse kan ikke bli instantiated og det gir ikke 100 prosent abstraksjon på grunn av det faktum at det kan ha konkret metode.

Hva er et grensesnitt?

Et grensesnitt ser likevel ut som en klasse, det er det ikke. Fordi Java ikke støtter flere arv, er et grensesnitt noen ganger ideelt for å gi grunnlag for klassehierarkiet. Et grensesnitt er mer en blåkopi av en klasse som også brukes til å oppnå abstraksjon i Java. Den inneholder abstrakte metoder og statiske konstanter. Enkelt sagt er et grensesnitt en samling av abstrakte metoder som brukes til å spesifisere en oppførsel som klassen må implementere. I motsetning til abstrakt klasse gir grensesnittet full abstraksjon i Java. Det kan ha både metoder og variabler som en klasse, men metodene som er oppgitt i grensesnitt, er abstrakte som standard.

Forskjellen mellom abstrakt klasse og grensesnitt i Java

  1. "Flere arv" av abstrakt klasse og grensesnitt i Java - Til tross for at både abstrakt klasse og grensesnitt primært brukes til abstraksjon, er de ganske forskjellige fra hverandre. Mens en abstrakt klasse er en klasse, er et grensesnitt et grensesnitt. Det betyr at mens et grensesnitt bare kan utvide et annet Java-grensesnitt, kan en abstrakt klasse implementere flere arv i Java. Vel, Java støtter ikke flere arv, men man kan implementere flere arv i Java.
  2. "Metode Type" av abstrakt klasse og grensesnitt i Java - Den andre store forskjellen mellom de to er at mens et grensesnitt kun kan ha abstrakte metoder, kan en abstrakt klasse ha både abstrakte og ikke-abstrakte metoder. Men siden Java 8 kan et grensesnitt også ha standard og statiske metoder.
  3. "Tilgangsmodifikatorer" av abstrakt klasse og grensesnitt i Java - En abstrakt klasse kan ha offentlige, private og beskyttede tilgangsmodifikatorer, men metoder for et grensesnitt er implisitt offentlige og abstrakte. Du kan ikke bruke noen annen tilgang modifikator med grensesnitt metoder '.
  4. Implementering av abstrakt klasse og grensesnitt i Java - En abstrakt klasse kan gi implementering av et grensesnitt. Et grensesnitt, derimot, kan ikke gi implementeringen av en abstrakt klasse.
  5. "Søkeord" for abstrakt klasse og grensesnitt i Java- Mens "abstrakt" søkeord er vant til å erklære en abstrakt klassemetode som abstrakt, er grensesnitt imidlertid en helt annen historie; de kan bare ha offentlige, statiske sluttkonstanter og metodedeklarasjoner.
  6. "Bruk" av abstrakt klasse og grensesnitt i Java - Selv om et grensesnitt er ideelt for typegodkjenning, er en abstrakt klasse best egnet for gjenbrukbarhet og evolusjonsperspektiv. Et grensesnitt ser ut som en klasse, men det er ikke en klasse.
  7. "Pålitelighet" av abstrakt klasse og grensesnitt i Java- En annen stor forskjell mellom en abstrakt klasse og et grensesnitt er at den tidligere er litt raskere enn sistnevnte fordi et søk vanligvis er involvert i et grensesnitt før noen overstyrt metode kalles i Java.
  8. "Endelige variabler" av abstrakt klasse og grensesnitt i Java - Variablene deklarert i et grensesnitt er standard som standard, mens en abstrakt klasse kan inneholde ikke-endelige variabler.

Abstrakt klasse vs grensesnitt i Java: Sammenligningstabell

Abstrakt klasse Interface
Abstrakt søkeord brukes til å lage en abstrakt klasse, og den kan brukes med metoder. Grensesnitt søkeord brukes til å opprette et grensesnitt, men det kan ikke brukes med metoder.
En klasse kan utvide kun en abstrakt klasse. En klasse kan implementere mer enn ett grensesnitt.
En abstrakt klasse kan ha både abstrakte og ikke-abstrakte metoder. Et grensesnitt kan bare ha abstrakte metoder.
Variabler er ikke endelige som standard. Det kan inneholde uavhengige variabler. Variabler er endelige som standard i et grensesnitt.
En abstrakt klasse kan gi implementering av et grensesnitt. Et grensesnitt kan ikke gi implementering av en abstrakt klasse.
Det kan ha metoder med implementeringer. Det gir absolutt abstraksjon og kan ikke ha metoden implementeringer.
Det kan ha offentlige, private, statiske og beskyttede tilgangsmodifikatorer. Metodene er implisitt offentlige og abstrakte i Java-grensesnitt.
Det støtter ikke flere arv. Den støtter flere arv.
Den er ideell for kod gjenbruk og evolusjon perspektiv. Den er ideell for Type-erklæring.

Sammendragspunkter på abstrakt klasse og grensesnitt i Java

Både abstrakt klasse og grensesnitt brukes til abstraksjon; De har imidlertid en rettferdig andel av forskjellene. Hovedforskjellen mellom de to er drevet av abstraksjonsmetoder. Mens den tidligere kan eller ikke har abstrakte metoder, er sistnevnte implisitt abstrakt. En abstrakt klasse kan ha både abstrakte og ikke-abstrakte metoder. Et grensesnitt kan derimot bare ha abstrakte metoder, slik at de ikke kan ha implementering, noe som ganske enkelt betyr at et grensesnitt ikke kan ha ikke-abstrakte metoder. En abstrakt klasse kan ikke bli instantiated som forbyder opprettelse av et objekt. Et grensesnitt, derimot, kan se ut som en klasse, men det er det ikke.