Skillnaden mellan gränssnitt och abstrakt klass i Java & C #

Författare: Laura McKinney
Skapelsedatum: 1 April 2021
Uppdatera Datum: 1 Maj 2024
Anonim
Skillnaden mellan gränssnitt och abstrakt klass i Java & C # - Teknologi
Skillnaden mellan gränssnitt och abstrakt klass i Java & C # - Teknologi

Innehåll


Interface och Abstract klass båda bidrar till "ofullständig typ" i OOP. Ibland behöver vi en superklass för att definiera ”vad man ska göra” men inte ”hur man gör”, det är hur man gör en del kommer att implementeras av den härledda klassen enligt dess behov, ”gränssnitt”Ger en lösning på detta. Ibland behöver vi en superklassklass som definierar någon generaliserad struktur som kan implementeras av härledda klasser och någon specificerad struktur som kan användas av de härledda klasserna, "abstrakt klass”Ger en lösning på detta. Den grundläggande skillnaden mellan gränssnitt och abstrakt klass är att gränssnittet är helt ofullständigt och abstrakt klass är delvis ofullständigt.

  1. Jämförelsediagram
  2. Definition
  3. Viktiga skillnader
  4. Slutsats

Jämförelsediagram

Grund för jämförelseGränssnittAbstrakt klass
GrundläggandeNär du bara har kunskap om kraven inte om dess implementering använder du "Gränssnitt".När du delvis känner till implementeringarna använder du "Abstrakt klasser".
metoderGränssnittet innehåller bara abstrakta metoder.Abstrakt klass innehåller abstrakta metoder samt konkreta metoder.
Åtkomstmodifiering av metoderGränssnittsmetoder är alltid "Offentligt" och "Abstrakt", även om vi inte förklarar det. Därför kan det sägas vara 100%, ren abstrakt klass.Det är inte obligatoriskt att metoden i abstrakt klass är offentlig och abstrakt. Det kan också ha konkreta metoder.
Begränsad modifierare för metoderEn gränssnittsmetod kan inte deklareras med följande modifierare:
Allmänt: Privat och skyddat
Sammanfattning: slutlig, statisk, synkroniserad, infödd, striktfp.
Det finns inga begränsningar för modifierarna av den abstrakta klassvariabeln.
Åtkomstmodifiering av variablerAcess Modifier tillåtet för gränssnittsvariabler är offentliga, statiska och slutliga oavsett om vi förklarar eller inte.Variablerna i abstrakt klass behöver inte vara offentliga, statiska, slutliga.
Begränsade modifierare för variablerGränssnittsvariabler kan inte deklareras som privata, skyddade, övergående, flyktiga.Det finns ingen begränsning för modifierarna av abstrakta klassvariabler.
Initialisering av variablerGränssnittsvariablerna måste initialiseras vid tidpunkten för deklarationen.Det är inte obligatoriskt att abstrakta klassvariabler måste initialiseras vid tidpunkten för dess deklaration.
Instans och statiska blockInuti gränssnittet kan du inte förklara en instans eller ett statiskt block.Abstrakt klass tillåter en instans eller statisk block i den.
konstruktörerDu kan inte förklara konstruktörens gränssnitt.Du kan förklara konstruktör i en abstrakt klass.


Definition av gränssnitt

Java tillåter inte flera arv. Det vill säga att en enda klass inte kan ärva fler än en klass åt gången. Anledningen bakom detta kan förklaras med ett exempel. Låt oss anta att vi har två förälderklasser, A och B och en härledd klass C. Den härledda klass C ärver både klasserna A och B.Nu, båda har klass A och B har metoduppsättning (), då kommer det att vara en fråga för klass C vilken klassens metod () ska den ärva. Lösningen på detta problem är "gränssnitt".

Gränssnittet är en ren abstrakt klass. Nyckelordet som används för att skapa ett gränssnitt är "gränssnitt". Eftersom alla metoder inom gränssnittet är helt abstrakta. Gränssnittet anger bara vad en klass måste göra men definierar inte hur den gör det. Bara för att all metod som deklareras i gränssnittet är abstrakt skapas ingen instans för ett gränssnitt. Den allmänna formen för "gränssnitt" i java är:


access_specifier gränssnitt interface_name {return-type method-name1 (parameter-list); return-type method-name2 (parameter-list); typ final-varname1 = värde; typ final-varname2 = värde; // ... return-type method-nameN (parameter-list); typ final-varnameN = värde; }

Åtkomstspecifikationen förklaras offentlig eftersom klasserna behöver implementera gränssnittet.

Vi har inte begreppet ”gränssnitt” i C ++. Men Java och C # definierar gränssnittet mycket bra.

Gränssnitt i Java:

  • Variabler för ett gränssnitt är som standard alltid offentliga, statiska och slutliga.
  • Variabler måste initialiseras vid tidpunkten för deklarationen.
  • Variabler kan aldrig förklaras som privata, skyddade, kortvariga och flyktiga.
  • Metoder för ett gränssnitt är alltid offentliga och abstrakta medan de aldrig kan förklaras som privata, skyddade, slutliga, statiska, synkroniserade, infödda och striktfp.
  • Du kan inte förklara någon konstruktör inuti gränssnittet eftersom det huvudsakliga syftet med konstruktören är initialisering av klassvariabler, men i gränssnittsvariabler initialiseras vid tidpunkten för dess deklaration.
  • Gränssnitt kan ärva andra gränssnitt men klassen som implementerar ett sådant gränssnitt måste implementera metoderna för alla ärvda gränssnitt.
  • En klass kan ärva mer än ett gränssnitt åt gången, och den måste implementera alla metoder för alla ärvda gränssnitt.

Den allmänna formen för att implementera ett gränssnitt i Java:

class class_name implementerar Interface_name {// class-body}

För att ärva ett gränssnitt använder en klass ett nyckelord "implementerar", och klassen implementerar all metod som deklareras av ett ärftat gränssnitt.

Gränssnitt i C #:

Gränssnitt i C # liknar nästan gränssnittet i Java utom:

  • Gränssnittet i C # deklarerar inte variabler.
  • Gränssnittsnamnet är prefixat med ett huvud I och ärvs med ett kolon (:) -tecken.

Den allmänna formen för att implementera ett gränssnitt i C #:

class class_name: interface_name {// class-body}

Definition av abstrakt klass

En klass som innehåller en eller flera abstrakta metoder kallas abstrakt klass, och en klass förklaras som abstrakt med hjälp av nyckelordet "abstrakt", föregått av "klass" nyckelordet i början av klassdeklarationen. Eftersom den abstrakta klassen innehåller den abstrakta metoden utgör den till en ofullständig typ. Därför kan du inte skapa objekt i en abstrakt klass. När en klass ärver en abstrakt klass måste den implementera alla abstrakta klassers abstrakta metoder om den inte gör det måste den också förklaras som abstrakt. Det abstrakta attributet ärvs tills den fullständiga implementeringen av abstrakta metoder uppnås.

Den abstrakta klassen kan också innehålla konkreta metoder som kan användas av den härledda klassen som den är. Men du kan inte förklara en abstrakt konstruktör eller en abstrakt statisk metod i en abstrakt klass. Den allmänna formen för den abstrakta klassen i Java är som följer:

abstrakt klass klassnamn {abstrakt metodnamn1 (); abstrakt metodnamn2 (); : return_type method_name3 (parameter_list) {// concrete method} return_type method_name4 (parameter_list) {// concrete method}};

Begreppet abstrakt klass liknar både Java och C #. En abstrakt klass är något annorlunda i C ++.

I C ++ om en klass åtminstone har en virtuell funktion blir klassen en abstrakt klass. I stället för nyckelordet "abstrakt" används nyckelordet "virtuellt" för att förklara en abstrakt metod.

  1. När du har kunskapen om "vad som krävs" men inte om "hur det skulle implementeras" måste gränssnittet användas. Å andra sidan, om du vet vad som krävs och delvis vet hur det skulle genomföras, använd en abstrakt klass.
  2. Ett gränssnitt har alla sina metoder abstrakt men en abstrakt klass har några abstrakta metoder och vissa konkreta metoder.
  3. Metoderna i ett gränssnitt är offentliga och abstrakta, det kallas också som en ren abstrakt klass. Å andra sidan är metoderna i ett abstrakt inte begränsade till endast offentliga och abstrakta.
  4. En gränssnittsmetod kan aldrig vara privata, skyddade, slutliga, statiska, synkroniserade, ursprungliga eller striktfp. Å andra sidan finns det inga begränsningar för metoder för en abstrakt klass.
  5. Variablerna i ett gränssnitt är offentliga och slutliga oavsett om vi förklarar dem eller inte medan det inte finns någon sådan begränsning för variablerna i en abstrakt klass endast är offentliga och slutgiltiga.
  6. Variabler i ett gränssnitt kan aldrig vara privata skyddade övergående eller flyktiga medan det inte finns någon begränsning till variabler i en abstrakt klass.
  7. Gränssnittets variabel måste initialiseras under deklarationen. Å andra sidan kan variablerna i en abstrakt klass initialiseras när som helst.
  8. Inuti ett gränssnitt kan en instans eller statisk block inte deklareras, men du kan förklara instans eller statisk block i en abstrakt klass.
  9. Du kan inte definiera konstruktör i ett gränssnitt medan du kan definiera konstruktör i en abstrakt klass.

Slutsats:

När du behöver skapa en basklass som innehåller en generaliserad form av metoder som kan implementeras av de härledda klasserna efter deras behov, hjälper konceptet gränssnitt och abstrakt klass att göra det.