Forskel mellem interface og abstrakt klasse i Java & C #

Forfatter: Laura McKinney
Oprettelsesdato: 1 April 2021
Opdateringsdato: 13 Kan 2024
Anonim
Forskel mellem interface og abstrakt klasse i Java & C # - Teknologi
Forskel mellem interface og abstrakt klasse i Java & C # - Teknologi

Indhold


Interface og abstrakt klasse bidrager begge til “ufuldstændig type” i OOP. Undertiden har vi brug for en superklasse til at definere “hvad man skal gøre”, men ikke “hvordan man gør”, det er hvordan man gør en del implementeres af den afledte klasse efter dens behov, “grænseflade”Giver en løsning på dette. Nogle gange har vi brug for en superklasseklasse, der definerer en generaliseret struktur, der kan implementeres af afledte klasser og en bestemt specificeret struktur, der kan bruges af de afledte klasser, "abstrakt klasse”Giver en løsning på dette. Den grundlæggende forskel mellem interface og abstrakt klasse er, at interface er fuldstændig ufuldstændig, og abstrakt klasse er delvist ufuldstændig.

  1. Sammenligningstabel
  2. Definition
  3. Vigtige forskelle
  4. Konklusion

Sammenligningstabel

Grundlag for sammenligninggrænsefladeAbstrakt klasse
GrundlæggendeNår du kun har kendskab til kravene ikke om dens implementering, bruger du "Interface".Når du delvist kender til implementeringerne, bruger du "Abstrakte klasser".
MetoderInterface indeholder kun abstrakte metoder.Abstrakt klasse indeholder abstrakte metoder såvel som konkrete metoder.
Adgang modifikator af metoderGrænseflademetoder er altid "Offentlige" og "Abstrakte", selvom vi ikke erklærer det. Derfor kan det siges som 100%, ren abstrakt klasse.Det er ikke obligatorisk, at metoden i abstrakt klasse er offentlig og abstrakt. Det kan også have konkrete metoder.
Begrænset modifikator til metoderEn grænseflademetode kan ikke deklareres med følgende modifikatorer:
Offentligt: ​​Privat og beskyttet
Abstrakt: endelig, statisk, synkroniseret, native, strictfp.
Der er ingen begrænsninger på modifikatorerne for den abstrakte klassevariabel.
Adgang modifikator for variablerAcess Modifier tilladt for grænsefladevariabler er offentlige, statiske og endelige, uanset om vi erklærer eller ej.Variablerne i abstrakt klasse behøver ikke være offentlige, statiske, endelige.
Begrænsede modifikatorer for variablerGrænsefladevariabler kan ikke erklæres som private, beskyttede, kortvarige, flygtige.Der er ingen begrænsning på modifikatorerne for abstrakte klassevariabler.
Initialisering af variablerGrænsefladevariablerne skal initialiseres på tidspunktet for dens erklæring.Det er ikke obligatorisk, at abstrakte klassevariabler skal initialiseres på tidspunktet for dens erklæring.
Forekomst og statiske blokkeInde i grænsefladen kan du ikke erklære en instans eller en statisk blok.Abstrakt klasse tillader et eksempel eller en statisk blok inde i det.
ConstructorsDu kan ikke erklære konstruktørens indvendige interface.Du kan erklære konstruktør i en abstrakt klasse.


Definition af interface

Java tillader ikke flere arv. Det vil sige, at en enkelt klasse ikke kan arve mere end en klasse ad gangen. Årsagen bag dette kan forklares med et eksempel. Lad os antage, at vi har to forældreklasse, A og B og en afledt klasse C. Den afledte klasse C arver både klasser A og B.Nu har begge klasse A og B metodesæt (), så vil det være et spørgsmål for klasse C, hvilken klasses sæt () -metode, som den skal arve. Løsningen på dette problem er "interface".

Interface er en ren abstrakt klasse. Det nøgleord, der bruges til at oprette en grænseflade, er ”interface”. Da alle metoderne i interface er fuldstændigt abstrakte. Interfacet specificerer kun, hvad en klasse skal gøre, men det definerer ikke, hvordan den gør det. Bare fordi alle metoderne, der er erklæret inde i grænsefladen, er abstrakte, oprettes ingen instanser til en grænseflade. Den generelle form for "interface" i java er:


access_specifier grænseflade interface_navn {return-type method-name1 (parameter-liste); return-type method-name2 (parameter-liste); type final-varname1 = værdi; type final-varname2 = værdi; // ... return-type method-nameN (parameter-liste); type final-varnameN = værdi; }

Adgangsspecifikationen erklæres for offentlig, fordi klasserne skal implementere grænsefladen.

Vi har ikke konceptet "Interface" i C ++. Men Java og C # definerer interface meget godt.

Grænseflade i Java:

  • Variabler af en grænseflade er som standard altid offentlige, statiske og endelige.
  • Variabler skal initialiseres på tidspunktet for dens erklæring.
  • Variabler kan aldrig erklæres som private, beskyttede, kortvarige og flygtige.
  • Metoder til en grænseflade er altid offentlige og abstrakte, mens de aldrig kan erklæres som private, beskyttede, endelige, statiske, synkroniserede, indfødte og strenge fp.
  • Du kan ikke erklære nogen konstruktør inden i grænsefladen, da hovedformålet med konstruktøren er initialisering af klassevariabler, men i interfacevariabler initialiseres på tidspunktet for dens erklæring.
  • Interface kan arve andre grænseflader, men klassen, der implementerer en sådan grænseflade, skal implementere metoderne for alle de arvede grænseflader.
  • En klasse kan arve mere end en interface ad gangen, og den skal implementere alle metoder til alle de arvede grænseflader.

Den generelle form for implementering af en grænseflade i Java:

class class_name implementerer Interface_name {// class-body}

For at arve en grænseflade bruger en klasse et nøgleord “implementeringer”, og klassen implementerer al den metode, der er erklæret af en arvet interface.

Grænseflade i C #:

Interface i C # ligner næsten interface i Java undtagen:

  • Interface i C # angiver ikke variabler.
  • Navnet på grænsefladen er præfixeret med en hovedstæde I og arves med et kolon (:) -tegn.

Den generelle form for implementering af en grænseflade i C #:

class class_name: interface_name {// class-body}

Definition af Abstract Class

En klasse, der indeholder en eller flere abstrakte metoder, kaldes abstrakt klasse, og en klasse erklæres som abstrakt ved hjælp af nøgleordet "abstrakt", forud for et "klasse" nøgleord i starten af ​​klassedeklarationen. Da den abstrakte klasse indeholder den abstrakte metode, udgør den en ufuldstændig type. Derfor kan du ikke oprette objekter i en abstrakt klasse. Hver gang en klasse arver en abstrakt klasse, skal den implementere alle de abstrakte klasses abstrakte metoder, hvis den ikke gør det, skal den også erklæres som abstrakt. Den abstrakte egenskab arves, indtil den komplette implementering af abstrakte metoder er opnået.

Den abstrakte klasse kan også indeholde konkrete metoder, der kan bruges af den afledte klasse, som den er. Men du kan ikke erklære en abstrakt konstruktør eller en abstrakt statisk metode i en abstrakt klasse. Den generelle form for den abstrakte klasse i Java er som følger:

abstrakt klasse klassens navn {abstrakt metode_navn1 (); abstrakt metode_navn2 (); : return_type method_name3 (parameter_list) {// konkret metode} return_type method_name4 (parameter_list) {// konkret metode}};

Begrebet abstrakt klasse ligner både Java og C #. En abstrakt klasse er lidt anderledes i C ++.

I C ++, hvis en klasse mindst har en virtuel funktion, bliver klassen en abstrakt klasse. I stedet for nøgleordet "abstrakt" bruges nøgleordet "virtuel" til at erklære en abstrakt metode.

  1. Når du har viden om "hvad der kræves", men ikke om "hvordan det ville blive implementeret", skal interface bruges. På den anden side, hvis du ved, hvad der kræves, og delvist ved, hvordan det ville blive implementeret, så brug en abstrakt klasse.
  2. En grænseflade har alle dens metoder abstrakte, men en abstrakt klasse har nogle abstrakte metoder og nogle konkrete metoder.
  3. Metoderne i en grænseflade er offentlige og abstrakte, og det kaldes også som en ren abstrakt klasse. På den anden side er metoderne inde i et abstrakt ikke begrænset til kun at være offentlige og abstrakte.
  4. En interface-metode kan aldrig være privat, beskyttet, endelig, statisk, synkroniseret, native eller strictfp. På den anden side er der ingen begrænsninger for metoder til en abstrakt klasse.
  5. Variablerne i en grænseflade er offentlige og endelige, uanset om vi erklærer dem eller ikke, hvorimod variablerne i en abstrakt klasse kun er offentlige og endelige.
  6. Variabler i en grænseflade kan aldrig være privatbeskyttede kortvarige eller flygtige, mens der ikke er nogen begrænsning til variabler i en abstrakt klasse.
  7. Variablen for en grænseflade skal initialiseres under erklæringen. På den anden side kan variablerne i en abstrakt klasse initialiseres når som helst.
  8. Inde i en grænseflade kan en instans eller en statisk blok ikke deklareres, men du kan erklære forekomst eller statisk blok i en abstrakt klasse.
  9. Du kan ikke definere konstruktør i en grænseflade, mens du kan definere konstruktør i en abstrakt klasse.

Konklusion:

Når du skal oprette en baseklasse, der indeholder en generaliseret form for metoder, der kan implementeres af de afledte klasser i henhold til deres behov, hjælper begrebet interface og abstrakt klasse med at gøre det.