Forskjellen mellom grensesnitt og abstrakt klasse i Java & C #

Forfatter: Laura McKinney
Opprettelsesdato: 1 April 2021
Oppdater Dato: 17 Kan 2024
Anonim
Forskjellen mellom grensesnitt og abstrakt klasse i Java & C # - Teknologi
Forskjellen mellom grensesnitt og abstrakt klasse i Java & C # - Teknologi

Innhold


Grensesnitt og abstrakt klasse bidrar begge til "ufullstendig type" i OOP. Noen ganger trenger vi en superklasse for å definere "hva vi skal gjøre", men ikke "hvordan gjøre", det er hvordan du gjør en del vil bli implementert av den avledede klassen i henhold til dens behov, "grensesnitt”Gi en løsning på dette. Noen ganger trenger vi en superklasseklasse som definerer en generalisert struktur som kan implementeres av avledede klasser og noen spesifisert struktur som kan brukes av de avledede klassene, "abstrakt klasse”Gir en løsning på dette. Den grunnleggende forskjellen mellom grensesnitt og abstrakt klasse er at grensesnittet er helt ufullstendig, og abstrakt klasse er delvis ufullstendig.

  1. Sammenligningstabell
  2. Definisjon
  3. Viktige forskjeller
  4. Konklusjon

Sammenligningstabell

Grunnlag for sammenligningInterfaceAbstrakt klasse
grunn~~POS=TRUNCNår du bare har kunnskapen om kravene ikke om implementeringen, bruker du "Grensesnitt".Når du delvis kjenner til implementeringene bruker du "Abstrakte klasser".
metoderGrensesnitt inneholder bare abstrakte metoder.Abstrakt klasse inneholder abstrakte metoder så vel som konkrete metoder.
Tilgangsmodifiserer av metoderGrensesnittmetoder er alltid "Public" og "Abstract", selv om vi ikke erklærer det. Derfor kan det sies som 100%, ren abstrakt klasse.Det er ikke obligatorisk at metode i abstrakt klasse vil være offentlig og abstrakt. Det kan ha konkrete metoder også.
Begrenset modifikator for metoderEn grensesnittmetode kan ikke deklareres med følgende modifikatorer:
Offentlig: Privat og beskyttet
Sammendrag: endelig, statisk, synkronisert, innfødt, strengfp.
Det er ingen begrensninger på endringene av den abstrakte klassevariabelen.
Tilgangsmodifiserer av variablerAcess Modifier tillatt for grensesnittvariabler er offentlige, statiske og endelige uansett om vi deklarerer eller ikke.Variablene i abstrakt klasse trenger ikke være offentlige, statiske, endelige.
Begrensede modifikatorer for variablerGrensesnittvariabler kan ikke deklareres som private, beskyttede, forbigående, flyktige.Det er ingen begrensninger i modifikatorene for abstrakte klassevariabler.
Initialisering av variablerGrensesnittvariablene må initialiseres på tidspunktet for erklæringen.Det er ikke obligatorisk at abstrakte klassevariabler må initialiseres på tidspunktet for erklæringen.
Forekomst og statiske blokkerInne i grensesnittet kan du ikke erklære en forekomst eller statisk blokk.Abstrakt klasse tillater en forekomst eller statisk blokk i den.
ConstructorsDu kan ikke erklære konstruktørens grensesnitt.Du kan erklære konstruktør i en abstrakt klasse.


Definisjon av grensesnitt

Java tillater ikke flere arv. Det vil si at en enkelt klasse ikke kan arve mer enn en klasse om gangen. Årsaken bak dette kan forklares med et eksempel. La oss anta at vi har to foreldreklasser, A og B og en avledet klasse C. Den avledede klasse C arver både klassene A og B.Nå, begge har klasse A og B har metodesett (), da vil det være et spørsmål for klasse C hvilken klasses sett () -metode skal arve. Løsningen på dette problemet er "grensesnitt".

Grensesnitt er en ren abstrakt klasse. Nøkkelordet som brukes til å lage et grensesnitt er "grensesnitt". Ettersom alle metodene i grensesnittet er fullstendig abstrakte. Grensesnittet spesifiserer bare hva en klasse må gjøre, men det definerer ikke hvordan den gjør det. Bare fordi alle metodene som er erklært i grensesnittet er abstrakte, opprettes ingen forekomster for et grensesnitt. Den generelle formen for "grensesnitt" i java er:


access_specifier grensesnitt interface_name {return-type method-name1 (parameter-list); return-type method-name2 (parameter-list); type final-varname1 = verdi; type final-varname2 = verdi; // ... return-type method-nameN (parameter-list); type final-varnameN = verdi; }

Tilgangspesifikatoren er erklært offentlig fordi klassene trenger å implementere grensesnittet.

Vi har ikke konseptet “Grensesnitt” i C ++. Men Java og C # definerer grensesnitt veldig bra.

Grensesnitt i Java:

  • Variabler av et grensesnitt er som standard alltid offentlige, statiske og endelige.
  • Variabler må initialiseres på tidspunktet for erklæringen.
  • Variabler kan aldri deklareres som private, beskyttede, forbigående og flyktige.
  • Metoder for et grensesnitt er alltid offentlige og abstrakte, mens de aldri kan erklæres som private, beskyttede, endelige, statiske, synkroniserte, innfødte og strenge fp.
  • Du kan ikke erklære noen konstruktører i grensesnittet da hovedformålet med konstruktøren er initialisering av klassevariabler, men i grensesnittvariabler initialiseres på tidspunktet for erklæringen.
  • Grensesnitt kan arve andre grensesnitt, men klassen som implementerer et slikt grensesnitt må implementere metodene til alle arvede grensesnitt.
  • En klasse kan arve mer enn ett grensesnitt om gangen, og den må implementere alle metodene til alle de arvede grensesnittene.

Den generelle formen for implementering av et grensesnitt i Java:

class class_name implementerer Interface_name {// class-body}

For å arve et grensesnitt bruker en klasse et nøkkelord “implementeringer”, og klassen implementerer all metoden deklarert av et arvet grensesnitt.

Grensesnitt i C #:

Grensesnitt i C # er nesten likt grensesnittet i Java bortsett fra:

  • Grensesnitt i C # deklarerer ikke variabler.
  • Navnet på grensesnittet er forhåndsinnstilt med et hovedstykke I og er arvet med et kolon (:) -tegn.

Den generelle formen for å implementere et grensesnitt i C #:

class class_name: interface_name {// class-body}

Definisjon av Abstract Class

En klasse som inneholder en eller flere abstrakte metoder kalles abstrakt klasse, og en klasse blir erklært som abstrakt ved hjelp av nøkkelordet "abstrakt", foran "klasse" nøkkelordet i begynnelsen av klassedeklarasjonen. Ettersom den abstrakte klassen inneholder den abstrakte metoden utgjør den til en ufullstendig type. Derfor kan du ikke lage objekter av en abstrakt klasse. Hver gang en klasse arver en abstrakt klasse, må den implementere alle de abstrakte metodene i den abstrakte klassen, hvis den ikke gjør det, må den også erklæres som abstrakt. Det abstrakte attributtet arves inntil fullstendig implementering av abstrakte metoder er oppnådd.

Den abstrakte klassen kan også inneholde konkrete metoder som kan brukes av den avledede klassen som den er. Men du kan ikke erklære en abstrakt konstruktør eller en abstrakt statisk metode i en abstrakt klasse. Den generelle formen for den abstrakte klassen i Java er som følger:

abstrakt klasse class_name {abstract method_name1 (); abstrakt metode_navn2 (); : return_type method_name3 (parameter_list) {// konkret metode} return_type method_name4 (parameter_list) {// concrete method}};

Konseptet med en abstrakt klasse er lik i både Java og C #. En abstrakt klasse er litt annerledes i C ++.

I C ++ hvis en klasse i det minste har en virtuell funksjon, blir klassen en abstrakt klasse. I stedet for nøkkelordet "abstrakt", brukes nøkkelordet "virtuell" for å erklære en abstrakt metode.

  1. Når du har kunnskap om "hva som kreves", men ikke "hvordan det vil bli implementert", må grensesnittet brukes. På den annen side, hvis du vet hva som kreves og delvis vet hvordan det ville bli implementert, bruk en abstrakt klasse.
  2. Et grensesnitt har alle metodene sine abstrakte, men en abstrakt klasse har noen abstrakte metoder og noen konkrete metoder.
  3. Metodene i et grensesnitt er offentlige og abstrakte, og det kalles det også som en ren abstrakt klasse. På den annen side er metodene i et abstrakt ikke bare begrenset til å være offentlige og abstrakte.
  4. En grensesnittmetode kan aldri være privat, beskyttet, endelig, statisk, synkronisert, native eller strictfp. På den annen side er det ingen begrensninger for metoder i en abstrakt klasse.
  5. Variablene i et grensesnitt er offentlige og endelige uansett om vi erklærer dem eller ikke, mens variablene i en abstrakt klasse ikke er offentlige og endelige bare.
  6. Variabler i et grensesnitt kan aldri være privatbeskyttet forbigående eller flyktige, mens det ikke er noen begrensning for variabler i en abstrakt klasse.
  7. Variabelen til et grensesnitt må initialiseres under erklæring. På den annen side kan variablene i en abstrakt klasse initialiseres når som helst.
  8. Inne i et grensesnitt kan ikke en forekomst eller statisk blokk deklareres, men du kan erklære forekomst eller statisk blokk i en abstrakt klasse.
  9. Du kan ikke definere konstruktør i et grensesnitt, mens du kan definere konstruktør i en abstrakt klasse.

Konklusjon:

Når du trenger å lage en baseklasse som inneholder en generalisert form for metoder som kan implementeres av de avledede klassene i henhold til deres behov, hjelper konseptet grensesnitt og abstrakt klasse med å gjøre det.