Vad är skillnaden mellan abstrakt klass och gränssnitt i Java?

Denna artikel hjälper dig att förstå nyckelskillnaden mellan abstrakt klass och gränssnitt i java med hjälp av ett exempelprogram.

Abstrakta klasser och gränssnitt är de två huvudsakliga byggstenarnaav . Även om båda huvudsakligen används för abstraktion, skiljer de sig mycket från varandra och kan inte användas omväxlande. I den här artikeln ska vi ta reda på vad som är skillnaden mellan abstrakt klass och gränssnitt i Java.

Ämnen som diskuteras i denna artikel är följande:





Att förstå skillnaderna mellan abstrakt klass och gränssnitt i , du måste veta vad en abstrakt klass är och vad ett gränssnitt är. Låt oss börja med att diskutera vad det är.

Vad är abstrakt klass i Java?

På vilket programmeringsspråk som helst, abstraktion betyder att dölja irrelevanta detaljer från användaren för att bara fokusera på de väsentliga detaljerna för att öka effektiviteten och därigenom minska komplexiteten. I Java uppnås abstraktion med abstrakta klasser . En abstrakt klass fångar vanliga egenskaper hos underklasser och kan innehålla eller inte innehålla någon abstrakt metod. Det kan inte instansieras men kan bara användas som en superklass av dess underklasser. Här är ett exempel på ett program som visar abstrakt klass:



Notera: Ett abstrakt metod , är en metod som inte implementeras på plats och lägger tillofullständighet till klass .

paket MyPackage // abstrakt klassabstraktklass Animal {String AnimalName = '' Animal (String name) {this.AnimalName = name} // deklarera icke-abstrakta metoder // det har standardimplementering offentligt ogiltigt BasicInfo (Strängdetaljer) {System. out.println (this.AnimalName + '' + detaljer)} // abstrakta metoder som kommer att // implementeras av dess underklass (er) abstrakt offentligt ogiltigt livsmiljö () abstrakt offentligt tomt andning ()} klass Terrestriskt utökar djur {// konstruktör Terrestrial (String name) {super (name)} @ Override public void habitat () {System.out.println ('leave on land and')} @ Override public void respiration () {System.out.println ('respire genom lungor eller luftstrupe. ')}} klass Aquatic extensions Animal {// constructor Aquatic (String name) {super (name)} @ Override public void habitat () {System.out.println (' Det lämnar i vatten och ') } @Override public void respiration () {System.out.println ('respire through gills or their skin.')}} Class AbstractClassDemo {public static voi d main (String [] args) {// skapa objektet för terrestrisk klass // och använda djurklassreferens. Djurobjekt1 = nya markbundna ('Människor') objekt1.BasicInfo ('är markbundna varelser, de') objekt1.habitat () objekt1.respiration () System.out.println ('') // skapa objekt i cirkelklass Animal object2 = new Aquatic ('Fishes') object2.BasicInfo ('är aqautic varelser, de') object2.habitat () object2.respiration ()}}

Produktion

Människor är marklevande varelser, de lämnar på land och andas genom lungor eller luftstrupe. Fiskar är akuta varelser, de lämnar i vatten och andas genom gälar eller deras hud.

De Grundläggande information () är en metod som delas av Markbundna och Vatten klasser. Eftersom Djurklass kan inte initieras, vi skapar föremål för Markbundna och Vatten klasser för programmeringsändamål. Därefter har vi gränssnitt.



Gränssnitt i Java

Ett annat sätt att uppnå abstraktion i Java är genom att använda gränssnitt .Ett gränssnitt är en samling abstrakta metoder, det har ingen konkret , till skillnad från en abstrakt klass. Men till skillnad från abstrakt klass ger ett gränssnitt full abstraktion i Java. Det kan ha både metoder och variabler precis som en klass. Metoderna som deklarerats i ett gränssnitt är dock abstrakta som standard.Här är en demonstrerar abstrakt klass:

paket MyPackage-gränssnitt Djur {// abstrakta metoder ogiltig livsmiljö () ogiltig andning ()} klass TerrestrialA implementerar djur {String AnimalName = '' // konstruktör TerrestrialA (strängnamn) {this.AnimalName = name} @Override public void habitat () {System.out.println (this.AnimalName + 'lämna på land och')} @Override allmän tomrumsandning () {System.out.println ('andas genom lungor eller luftrör.')}} Klass AquaticA implementerar djur {String AnimalName = '' // konstruktör AquaticA (strängnamn) {this.AnimalName = name} @Override public void habitat () {System.out.println (this.AnimalName + 'leave in water and')} @Override public void respiration () {System.out.println ('respire through gills or their skin.')}} Klass JavaInterfaceDemo {public static void main (String [] args) {// skapar objektet för Terrestrial class // och använder referens Animal class . Djurobjekt1 = nytt TerrestrialA ('Människor') objekt1.habitat () objekt1.respiration () System.out.println ('') // skapa objekt i cirkelklass Djur objekt2 = nytt AquaticA ('Fishes') objekt2.habitat () objekt2.respiration ()}}

Produktion

js får gruppens längd
Människor lämnar på land och andas genom lungor eller luftstrupe. Fiskar lämnar i vatten och andas genom gälar eller deras hud.

Om du inte har någon gemensam kod mellan din klasser , då kan du gå till gränssnittet. Ett gränssnitt är mer som en ritning av en klass eftersom det inte har några icke-abstrakta metoder.

Från ovanstående innehåll kanske du har märkt nyckelskillnaden mellan abstrakt klass och gränssnitt i . Vilket är, till skillnad från abstrakt klass, ett gränssnitt ger full abstraktion i Java. Låt oss nu gå vidare och lista ut andra skillnader.

Abstrakt klass mot gränssnitt

Tabellen nedan visar de viktigaste skillnaderna mellan abstrakt klass och gränssnitt.

Parameter Abstrakt klass Gränssnitt

Standardmetodimplementering

Det kan ha standardmetodimplementering

Gränssnitt ger ren abstraktion och kan inte implementeras alls

Variabler

Den kan innehålla icke-slutliga variabler.

Variabler som deklareras i ett gränssnitt är som standard final

Nyckelord används

En abstrakt klass kan utökas med nyckelordet “extends

Gränssnittet bör implementeras med hjälp av nyckelord ïmplements

Åtkomstmodifierare

Burkhar offentliga, skyddade, privata och standardmodifierare

Gränssnittsmetoder är som standard offentliga. du kan inte använda någon annan åtkomstmodifierare med den

Implementeringshastighet

Det är snabbare än gränssnittet

java hur man avslutar ett program

Ett gränssnitt är något långsammare och kräver extra indirektion

Normal klass

Det kan bara förlänga en abstrakt klass

c vs c ++ vs java

Kan implementera flera gränssnitt

Konstruktörer

En abstrakt klass kan ha konstruktörer

Ett gränssnitt kan inte ha konstruktörer

Flera arv

En abstrakt klass kan utöka en annan klass och kan implementera flera Java-gränssnitt

Gränssnittet kan endast utöka ett annat Java-gränssnitt

Tja, nu är du de viktigaste skillnaderna mellan abstrakt klass och gränssnitt i Java. Men hur bestämmer du när du ska använda vilken av dessa två?

När ska man använda abstrakt klass och när ska man använda gränssnitt?

Överväg att använda abstrakta klasser i följande fall:

  • Om du har några relaterade klasser som behöver dela samma kodrader
  • När du vill definiera icke-statiska eller icke-slutliga fält
  • När det finnsmetoder eller fälteller kräver åtkomstmodifierare annat än offentligt (som skyddad och privat)

Överväg att använda gränssnitt i följande fall:

  • När du vill uppnå ren abstraktion
  • Om du vill anställa flera olika , dvsimplementera mer än ett gränssnitt
  • När du vill ange beteendet för en viss datatyp men inte är orolig för vem som implementerar dess beteende.

Detta leder oss till slutet av den här artikeln. Jag har täckt en av de vanligaste Java-frågorna i Intervju, vilket är skillnaden mellan abstrakt klass och gränssnitt i Java.

Se till att du tränar så mycket som möjligt och återgår till din upplevelse.

Kolla in av Edureka, ett pålitligt online-lärande företag med ett nätverk av mer än 250 000 nöjda elever spridda över hela världen. Vi är här för att hjälpa dig med varje steg på din resa, för att bli en förutom de här Java-intervjufrågorna, kommer vi med en läroplan som är utformad för studenter och yrkesverksamma som vill vara Java-utvecklare.

Har du en fråga till oss? Vänligen nämna det i kommentarsektionen i detta ”Java Map-gränssnitt” artikeln så återkommer vi till dig så snart som möjligt.