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.
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.
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.
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. |
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.