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:
- Vad är en abstrakt klass i Java?
- Gränssnitt i Java
- Abstrakt klass mot gränssnitt
- När ska man använda abstrakt klass och när ska man använda gränssnitt?
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.