Forskellen mellem abstrakt klasse og interface i Java

Abstrakt klasse og interface bruges begge primært til abstraktion, men de er meget forskellige fra hinanden. Begge er en kerne del af Java, men har deres egne applikationsanvendelser. Selvom begge udtryk kan være synonyme med hinanden, kan de ikke bruges om hverandre.

Der er betydelige forskelle mellem de to. Mens en grænseflademetode som standard er abstrakt, kan et abstrakt indeholde både abstrakte og ikke-abstrakte metoder. Nå, da Java 8 har grænseflader også metodeimplementeringer, og de kan have både statiske og standardmetoder i Java. Lad os studere forskellen mellem de to i detaljer.

Hvad er en abstrakt klasse i Java?

En abstrakt klasse i Java er en klasse, der erklæres abstrakt - den kan muligvis ikke indeholde abstrakte metoder. Det ligner en Java-grænseflade bortset fra, at det kan indeholde standardmetodeimplementering. Ligesom i objektorienteret programmering opnås abstraktion i Java ved hjælp af abstrakte klasser og grænseflader. I Java betyder abstraktion at skjule de irrelevante detaljer for brugeren for kun at fokusere på de væsentlige detaljer for at øge effektiviteten og derved reducere kompleksiteten. Nøgleordet "abstrakt" bruges til at oprette en abstrakt klasse lige før klassens nøgleord i klassedeklarationen.

En abstrakt klasse kan muligvis ikke indeholde abstraktionsmetoder (metoder uden krop), men hvis en klasse har mindst en abstraktionsmetode, skal den erklæres abstrakt. Ikke-abstrakte metoder kan imidlertid kun bruges i en abstrakt klasse, men kun til at implementere standardadfærd. Metoderne i en abstrakt klasse kan have adgangsmodifikatorer som private, offentlige, statiske og beskyttede, afhængigt af synlighedsniveauet. En abstrakt klasse kan ikke instantieres, og den giver ikke 100 procent abstraktion på grund af det faktum, at den kan have en konkret metode.

Hvad er en grænseflade?

En grænseflade ser dog ud som en klasse, det er den ikke. Da Java ikke understøtter flere arv, er en grænseflade undertiden ideel til at skabe base til klassehierarki. En grænseflade er mere en plan af en klasse, der også bruges til at opnå abstraktion i Java. Det indeholder abstrakte metoder og statiske konstanter. Kort sagt er en grænseflade en samling af abstrakte metoder, der bruges til at specificere en adfærd, som klassen skal implementere. 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, men de metoder, der er erklæret i interface er som standard abstrakte.

Forskellen mellem abstrakt klasse og interface i Java

  1. “Multiple arv” fra abstrakt klasse og interface i Java - På trods af det faktum, at både abstrakt klasse og interface primært bruges til abstraktion, er de ganske forskellige fra hinanden. Mens en abstrakt klasse er en klasse, er en grænseflade en grænseflade. Det betyder, at mens en grænseflade kun kan udvide en anden Java-grænseflade, kan en abstrakt klasse implementere flere arver i Java. Nå, Java understøtter ikke flere arv, men man kan implementere flere arv i Java.
  2. “Metodetype” af abstrakt klasse og interface i Java - Den anden største forskel mellem de to er, at selvom en grænseflade kun kan have abstrakte metoder, kan en abstrakt klasse have både abstrakte og ikke-abstrakte metoder. Siden Java 8 kan en grænseflade imidlertid også have standard- og statiske metoder.
  3. “Access Modifiers” af abstrakt klasse og interface i Java - En abstrakt klasse kan have offentlige, private og beskyttede adgangsmodifikatorer, men metoder til en grænseflade er implicit offentlig og abstrakt. Du kan ikke bruge nogen anden adgangsmodifikator med interfacemetoder '.
  4. “Implementering” af abstrakt klasse og interface i Java - En abstrakt klasse kan give implementeringen af ​​en grænseflade. På den anden side kan en grænseflade ikke give implementeringen af ​​en abstrakt klasse.
  5. “Nøgleord” for abstrakt klasse og interface i Java- Mens "abstrakt" nøgleord bruges til at erklære en abstrakt klassemetode som abstrakt, er grænseflader imidlertid en helt anden historie; de kan kun have offentlige, statiske endelige konstanter og metodedeklarationer.
  6. “Brug” af abstrakt klasse og interface i Java - Mens en grænseflade er ideel til typedeklaration, er en abstrakt klasse bedst egnet til kodegenanvendelighed og evolutionsperspektiv. En grænseflade ligner en klasse, men den er ikke en klasse.
  7. “Pålidelighed” af abstrakt klasse og interface i Java- En anden vigtig forskel mellem en abstrakt klasse og en grænseflade er, at førstnævnte er en smule hurtigere end sidstnævnte, fordi en søgning normalt er involveret i en grænseflade, før nogen overstyret metode kaldes i Java.
  8. “Endelige variabler” af abstrakt klasse og interface i Java - De variabler, der er erklæret i en grænseflade, er som standard endelige, mens en abstrakt klasse muligvis indeholder ikke-endelige variabler.

Abstrakt klasse vs interface i Java: sammenligningstabel

Abstrakt klasse grænseflade
Abstrakt nøgleord bruges til at skabe en abstrakt klasse, og det kan bruges med metoder. Interface nøgleord bruges til at oprette en grænseflade, men det kan ikke bruges med metoder.
En klasse kan kun udvide en abstrakt klasse. En klasse kan implementere mere end en grænseflade.
En abstrakt klasse kan have både abstrakte og ikke-abstrakte metoder. En grænseflade kan kun have abstrakte metoder.
Variabler er ikke endelige som standard. Det kan indeholde ikke-endelige variabler. Variabler er som standard endelige i en grænseflade.
En abstrakt klasse kan give implementeringen af ​​en grænseflade. En grænseflade kan ikke give implementering af en abstrakt klasse.
Det kan have metoder til implementeringer. Det giver absolut abstraktion og kan ikke have metodeimplementeringer.
Det kan have offentlige, private, statiske og beskyttede adgangsmodifikatorer. Metoderne er implicit offentligt og abstrakte i Java-interface.
Det understøtter ikke flere arv. Det understøtter flere arv.
Det er ideelt til kodegenbrug og evolutionsperspektiv. Det er ideelt til typedeklaration.

Resumépunkter om abstrakt klasse og interface i Java

Både abstrakt klasse og interface bruges til abstraktion; de har dog deres rimelige andel af forskelle. Den største forskel mellem de to er drevet af abstraktionsmetoder. Mens førstnævnte muligvis har abstrakte metoder, er sidstnævnte implicit abstrakt. En abstrakt klasse kan have både abstrakte og ikke-abstrakte metoder. En grænseflade kan på den anden side kun have abstrakte metoder, således at de ikke kan have implementering, hvilket blot betyder, at en grænseflade ikke kan have ikke-abstrakte metoder. En abstrakt klasse kan ikke startes, som forbyder oprettelse af et objekt. På den anden side kan en grænseflade ligne en klasse, men det er den ikke.