Klass och gränssnitt används båda för att skapa nya referenstyper. En klass är en samling av fält och metoder som opererar på fälten. Ett gränssnitt har helt abstrakta metoder dvs. metoder med ingen. Ett gränssnitt liknar syntaktiskt klassen, men det finns en stor skillnad mellan klass och gränssnitt, nämligen att en klass kan instansieras, men ett gränssnitt kan aldrig instansieras.
Så låt oss lära oss mer om skillnaderna mellan en klass och ett gränssnitt med hjälp av ett jämförelsediagram som visas nedan.
Innehåll: Klass och gränssnitt
- Samtalsdiagram
- Definition
- Nyckelskillnader
- Slutsats
Samtalsdiagram
Basis för jämförelse | Klass | Interface |
---|---|---|
Basic | En klass instansieras för att skapa objekt. | Ett gränssnitt kan aldrig instansieras eftersom metoderna inte kan utföra någon åtgärd när de åberopas. |
Nyckelord | Klass | Interface |
Access specifier | Medlemmarna i en klass kan vara privata, offentliga eller skyddade. | Medlemmarna i ett gränssnitt är alltid offentliga. |
Metoder | Metoderna i en klass definieras för att utföra en specifik åtgärd. | Metoderna i ett gränssnitt är rent abstrakta. |
Utveckling/utvidgning | En klass kan implementera ett obegränsat antal gränssnitt och kan endast utöka en klass. | Ett gränssnitt kan utöka flera gränssnitt men kan inte implementera något gränssnitt. |
Konstruktör | En klass kan ha konstruktörer för att initialisera variablerna. | Ett gränssnitt kan aldrig ha en konstruktör eftersom det knappast finns någon variabel att initialisera. |
Definition av klass
En klass är den viktigaste aspekten av Javaprogrammering utan klasser kan man inte implementera ett Javaprogram. En klass skapar referenstyper och dessa referenstyper används för att skapa objekt. En klass har en signatur och en kropp. Signaturen för en klass har klassens namn och information som talar om huruvida klassen har ärvt en annan klass. Kroppen i en klass har fält och metoder som opererar på dessa fält. En klass skapas med hjälp av nyckelordet class. Låt oss se hur man deklarerar en klass.
class class_name{/*fields...methods*/}
När en klass instansieras innehåller varje objekt som skapas en kopia av fält och metoder med dem. De fält och medlemmar som deklareras i en klass kan vara statiska eller icke-statiska. Statiska medlemmars värde är konstant för varje objekt medan de icke-statiska medlemmarna initieras av varje objekt på olika sätt beroende på dess krav.
Medlemmar i en klass har åtkomstspecifikationer som bestämmer medlemmarnas synlighet och tillgänglighet för användaren eller för underklasser. Tillgångsspecifikatorerna är public, private och protected. En klass kan ärvas av en annan klass med hjälp av åtkomstspecifikationen som bestämmer synligheten av medlemmarna i en överklass (den ärvda klassen) i en underklass (den ärvande klassen). Klass uppfyller således begreppet dataskydd och inkapsling i objektorienterad programmering.
Definition av gränssnitt
Ett gränssnitt är också en av de referenstyper som definieras i Java. Betydelsen av ett gränssnitt är att i Java kan en klass bara ärva en enda klass. För att undvika denna begränsning införde konstruktörerna av Java begreppet gränssnitt. Ett gränssnitt liknar syntaktiskt en klass, men saknar fältdeklaration och metoderna i ett gränssnitt har ingen implementering. Ett gränssnitt deklareras med hjälp av nyckelordet interface. Låt oss titta på deklarationen av ett gränssnitt.
interface interface_name {type var_name= value;type method1(parameter-list);type method2(parameter-list);..}
Ett gränssnitt definierar inte någon metod som deklareras inuti det eftersom det saknar fält att operera på. Bara för att någon metod inuti ett gränssnitt inte utför någon handling kan ett gränssnitt aldrig instansieras. Om ett gränssnitt har någon fältmedlem måste den initialiseras vid tidpunkten för deras deklaration. Ett gränssnitt innehåller aldrig några konstruktörer eftersom det saknar fältmedlemmar som kan initialiseras. Ett gränssnitt definierar alltså bara vad en klass måste göra i stället för hur den måste göra.
Ett gränssnitt som en gång skapats kan implementeras av ett obegränsat antal klasser med hjälp av nyckelordet implements. Men de klasser som implementerar ett gränssnitt måste definiera alla metoder inom ett gränssnitt. Ett gränssnitt kan också ärva ett annat gränssnitt med hjälp av nyckelordet extend. Om en klass implementerar ett gränssnitt som förlänger ett annat gränssnitt. Då måste en klass definiera metoderna för båda gränssnitten som förekommer i en kedja. Metoderna i ett gränssnitt måste alltid vara offentliga eftersom de måste vara tillgängliga för de klasser som implementerar dem.
Nyckelskillnader mellan klass och gränssnitt i Java
- En klass kan instansieras genom att skapa dess objekt. Ett gränssnitt instansieras aldrig eftersom de metoder som deklareras i ett gränssnitt är abstrakta och inte utför någon åtgärd, så det finns ingen anledning att instansiera något gränssnitt.
- En klass deklareras med hjälp av nyckelordet class. På samma sätt skapas ett gränssnitt med hjälp av nyckelordet interface.
- Medlemmarna i en klass kan ha åtkomstspecifikationer som public, private, protected. Men medlemmarna i ett gränssnitt är alltid offentliga eftersom de måste nås av de klasser som implementerar dem.
- Metoderna i en klass definieras för att utföra en åtgärd på de fält som deklareras i klassen. Eftersom gränssnittet saknar deklaration av fält är metoderna i ett gränssnitt rent abstrakta.
- En klass kan implementera hur många gränssnitt som helst, men kan bara förlänga en överklass. Ett gränssnitt kan förlänga hur många gränssnitt som helst men kan inte implementera något gränssnitt.
- En klass har konstruktörer definierade inuti den för att få variabeln initialiserad. Men ett gränssnitt har inga konstruktörer eftersom det inte finns några fält som ska initialiseras. Fälten i ett gränssnitt initialiseras endast vid tidpunkten för deras deklaration.
Slutsats
Både klasser och gränssnitt har sin egen betydelse. En klass används när vi behöver definiera hur uppgiften skulle utföras. Ett gränssnitt används när vi behöver veta vilken uppgift som ska utföras.