what is abstraction java learn with examples
Denna handledning förklarar vad som är Abstraktion i Java tillsammans med programmeringsexempel. Du lär dig också vad som är en abstrakt klass och varför används den:
I denna JAVA-serie kommer vi att diskutera de viktiga funktionerna i objektorienterad programmering (OOP) som också är kända som fyra pelare, dvs abstraktion, inkapsling, arv och polymorfism.
Den första pelaren i OOP är 'Abstraktion'. 'Abstraktion är processen att välja data för att endast visa relevant information för användaren.'
=> Ta en titt på Java-nybörjarguiden här.
Vad du kommer att lära dig:
- Abstraktion i OOP
- Vad är abstraktion i Java
- Skillnaden mellan abstraktion och inkapsling
- Slutsats
Abstraktion i OOP
Enkelt uttryckt visar 'abstraktion' bara de relevanta attributen för objekt och 'döljer' de onödiga detaljerna.
Till exempel, när vi kör bil är vi bara oroliga för att köra bilen som att starta / stoppa bilen, accelerera / bryta etc. Vi är inte oroliga för hur den faktiska start / stoppmekanismen eller accelerations- / bromsprocessen fungerar internt. Vi är bara inte intresserade av dessa detaljer.
Vad vi oroar oss för är den ”abstrakta” synen på dessa operationer som hjälper oss att driva bilen framåt och nå vår destination. Detta är ett enkelt exempel på abstraktion.
Således har bilen alla mekanismer och processer på plats men ur slutanvändarens perspektiv, dvs. bilförarens perspektiv, kommer han / hon bara att vara intresserad av den abstrakta synen på dessa processer.
Abstraktion minskar programmeringsinsatserna och därmed komplexiteten. En slutanvändare som använder applikationen behöver inte oroa sig för hur en viss funktion implementeras. Han / hon kan bara använda funktionerna efter behov.
I abstraktion hanterar vi därför idéer och inte händelserna. Detta innebär att vi döljer implementeringsinformationen från användaren och bara exponerar funktionaliteten för slutanvändaren. Därigenom vet användaren bara 'vad den gör' snarare än 'hur den gör'.
Abstraktion i OOP kan vara av två typer.
# 1) Dataabstraktion
Vid dataabstraktion skapar vi oftast komplexa datatyper och döljer deras implementering. Vi exponerar bara operationerna för att manipulera dessa datatyper utan att gå in på detaljerna i deras implementering.
stora dataanalysverktyg öppen källkod
En fördel med detta tillvägagångssätt är att vi kan ändra implementeringen när som helst utan att ändra beteendet som exponeras för användaren.
# 2) Kontrollabstraktion
Kontrollabstraktion samlar alla kontrolluttalanden som ingår i applikationen och exponerar dem som en enhet. Denna funktion används när vi måste utföra en fungerande funktion med denna kontrollenhet.
Kontrollabstraktion utgör huvudenheten för strukturerad programmering och med hjälp av kontrollabstraktion kan vi definiera enkla funktioner till komplexa ramar.
Vad är abstraktion i Java
Eftersom Java är ett OOP-språk kan abstraktion ses som en av de viktigaste funktionerna och byggstenarna i Java-språket. I Java implementeras abstraktion med hjälp av en abstrakt klass och gränssnitt.
Så hur implementerar vi abstraktion i Java? Java tillhandahåller en icke-åtkomstmodifierare 'abstrakt' för att implementera abstraktion. Denna abstrakta modifierare kan användas med klasser och metoder men inte med variabler.
Gränssnittet ger fullständig abstraktion, dvs. det ger bara metodprototyper och inte deras implementering. En abstrakt klass ger partiell abstraktion där minst en metod inte ska implementeras.
I denna handledning kommer vi att diskutera abstraktion med abstrakta klasser i detalj. Vi kommer att utforska gränssnitt i detalj i våra efterföljande handledning.
Java-abstraktionsexempel
Låt oss överväga exemplet nedan.
//abstract class abstract class Car{ abstract void accelerate(); } //concrete class class Suzuki extends Car{ void accelerate(){ System.out.println('Suzuki::accelerate'); } } class Main{ public static void main(String args()){ Car obj = new Suzuki(); //Car object =>contents of Suzuki obj.accelerate(); //call the method } }
Produktion:
Det enkla abstraktionsexemplet som ges ovan har en klassbil. I denna klass Car har vi en abstrakt metod för att accelerera (). Sedan ärver vi den här klassen i Suzuki-klassen. Inom Suzuki-klassen implementerar vi accelerationsmetoden.
Ovanstående exempel visar helt enkelt hur en abstrakt klass definieras, ärvs och sedan används i programmet.
Vad är Java Abstract Class
Vi nämnde redan att Java implementerar abstraktion med hjälp av abstrakta klasser och gränssnitt. Låt oss först utforska allt om den abstrakta klassen.
En abstrakt klass kan definieras som en klass som deklareras med nyckelordet ”abstrakt” och har en begränsning att den inte kan instanseras.
En abstrakt klass kan ha eller inte ha någon abstrakt metod (en metod utan implementering). När det gäller JVM är en abstrakt klass en ofullständig klass som inte har ett fullständigt beteende.
Den allmänna syntaxen för en abstrakt klass ges nedan:
abstract class { public abstract void abstractMethod(); public void normalMethod() { //method body } }
Som visas i syntaxen för ovanstående abstraktklass kan vi ha både abstrakta och icke-abstrakta metoder i en abstrakt klass. Nyckelordet ”abstrakt” föregår klassdeklarationen.
I ett nötskal kan en abstrakt klass beskrivas som visas nedan.
Abstrakt metod i Java
En abstrakt metod är en metod som föregås av ett ”abstrakt” nyckelord utan någon implementering. En abstrakt metod förklaras i en abstrakt klass.
En abstrakt metod är den som gör en klass ofullständig eftersom den inte har en implementering. Därför när vi inkluderar en abstrakt metod i klassen blir klassen naturligtvis ofullständig.
Vi kan använda den abstrakta metoden genom att implementera den i en underklass, dvs. en klass ärver den abstrakta klassen och implementerar eller tillhandahåller koden för alla abstraktmetoder som deklarerats i abstraktklassen genom att åsidosätta dem.
Således blir det obligatoriskt att åsidosätta den abstrakta metoden i underklassen. Om den abstrakta metoden inte också implementeras i underklassen måste vi också förklara underklassen som ”abstrakt”.
Den allmänna förklaringen av den abstrakta metoden är:
abstrakt tomhet methodName (parameter_lista);
När vi skriver den abstrakta metoden måste vi komma ihåg följande regler:
- En klass som innehåller en eller flera abstrakta metoder är en abstrakt klass.
- Vissa andra nyckelord bör inte användas med det abstrakta nyckelordet.
Följaktligen är följande kombinationer olagliga i Java.
- slutlig
- abstrakt infödd
- abstrakt statisk
- abstrakt privat
- abstrakt synkroniserat
- abstrakt striktfp
Låt oss implementera ett exempel på en abstrakt klass och en abstrakt metod.
//abstract class abstract class Bank{ abstract int getInterestRate(); } //concrete class class Citi extends Bank{ int getInterestRate(){return 7;} } //concrete class class HSBC extends Bank{ int getInterestRate(){return 6;} } class Main{ public static void main(String args()){ Bank b; b = new Citi (); // concrete class object System.out.println('Citi Rate of Interest is: '+b.getInterestRate()+'%'); b = new HSBC (); // concrete class object System.out.println('HSBC Rate of Interest is: '+b.getInterestRate()+'%'); } }
Produktion:
I exemplet ovan har vi en bankklass. I den här klassen har vi en abstrakt metod, getInterestRate (). Sedan förklarar vi två klasser - ICICI och BOI som ärver från bankklassen. Båda dessa klasser implementerar getInterestRate () -metoden genom att returnera sina respektive räntor.
Sedan skapar vi ett bankobjekt i huvudmetoden. För det första innehåller bankobjektet ett objekt av ICICI-klass och visar räntan. Därefter skapas BOI-objektet och det visar räntan.
Således kan vi anta att bankklassen är en slags skiss eller en struktur som gör att vi kan få en ränta. Från denna struktur kan vi skapa så många konkreta klasser som vi vill, och sedan kan vi få respektive räntesatser för varje bankobjekt (detta visas i huvudmetoden).
Vad är användningen av en abstrakt klass i Java
Varför använder vi en abstrakt klass när den i verkligheten inte har någon egen implementering?
Tillsammans med svaret på ovanstående fråga kommer vi också att illustrera hur man använder en abstrakt klass i exemplet som följer.
Låt oss överväga ett exempel på fordon. Vi vet att fordon kan vara av många typer. Vi kan ha bilar, skotrar, cyklar, mopeder, bussar etc. Även om det finns många typer av fordon har de vissa egenskaper eller attribut som är gemensamma för alla fordon oavsett typ.
Till exempel, varje fordon har en modell, chassinummer, färg osv. Var och en av dem har funktioner som start, stopp, acceleration, broms, etc. Nu har varje fordon ovanstående egenskaper och metoder som är gemensamma för de andra också. Samtidigt som en fordonsanvändare kanske vi inte är intresserade av vissa aspekter.
Till exempel, om en person kör bil, är det han / hon är intresserad av att bara starta och stoppa fordonet eller påskynda eller bromsa fordonet. Han / hon är inte intresserad av att veta hur fordonet startar eller stannar. Vi är bara intresserade av funktionernas abstrakta funktion och inte av deras detaljer.
Om vi nu vill representera exemplet ovan i ett program, hur utformar vi det? Först och främst kommer vi att implementera lite abstraktion. Nu vet vi att vissa funktioner är vanliga men beroende på varje modell kommer implementeringen av dessa funktioner att vara annorlunda.
Till att börja med förklarar vi en abstrakt klass ”Fordon”.
Vi har visat detta system nedan:
Så vi kommer att ha en abstrakt klass Fordon och det kommer att finnas en konkret klass som representerar varje modell av fordonet. För illustrationsändamål har vi endast använt tre modeller, dvs. bil, cykel och skoter.
Nedan visas klasshierarkin från ovanstående system.
abstract class Vehicle{ abstract void start () ; abstract void stop (); abstract void accelerate (); abstract void brake (); } class Car extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} } class Bike extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} } class Scooter extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} }
Så vi kommer att ha en fordonsabstraktklass och tre klasser bil, cykel och skoter. Var och en av dessa klasser utökar fordonsklassen och åsidosätter var och en av de abstrakta metoderna.
testplan och skillnad i teststrategi
Således i allmänhet, när vi måste representera ett sådant system som har vanliga metoder eller operationer att representera, för att bara presentera det yttre perspektivet för användaren, går vi för abstraktion. Som ett resultat tar vi ut de vanliga metoderna och representerar dem som abstrakta metoder och samlar dessa abstrakta metoder i en gemensam abstrakt klass.
När vi väl har beskrivit ett system som representeras som en abstrakt klass och operationerna som abstrakta metoder kan vi härleda valfritt antal klasser från den givna abstrakta klassen och åsidosätta de abstrakta metoderna för att implementera dessa operationer för varje klass.
På så sätt blir det användbart att utforma ett system.
Abstrakt klass och gränssnitt
Vi har sett den abstrakta klassen ovan. Gränssnitt är ännu andra byggstenar som implementerar abstraktion. Gränssnitt är kontrakt, och klasser som implementerar gränssnittet måste uppfylla dessa kontrakt.
Kontrakt i gränssnitt är inget annat än metoder som inte implementeras. Inuti gränssnitt har vi bara metodprototyper. Det kommer inte att ske en enda implementering av metoder inuti gränssnitt.
Om vi har en gränssnittsdeklaration enligt följande:
public interface interfaceA{ void myInterfaceMethod (); }
Då måste alla klasser som implementerar gränssnittet A åsidosätta 'myInterfaceMethod'.
Om vi alls inte åsidosätter metoden i en klass, representeras den klassen som abstrakt.
abstract class TestClass implements interfaceA{ // not a compulsion to override myInterfaceMethod. }
Vi kommer att ha en separat handledning om gränssnittet senare.
Låt oss sedan diskutera några av skillnaderna mellan abstraktklasser och gränssnitt i Java.
Skillnaden mellan abstrakt klass och gränssnitt
Abstrakt klass | Gränssnitt |
---|---|
En abstrakt klass kan ha privata eller skyddade datamedlemmar förutom offentliga medlemmar. | Gränssnittsmedlemmar är som standard offentliga. |
En abstrakt klass kan ha abstrakta och / eller icke-abstrakta metoder. | Ett gränssnitt kan bara ha abstrakta metoder. |
Sammanfattningen kan innehålla de slutliga variablerna eller inte. | Gränssnitt kan slutliga variabler som standardvariabler. |
En abstrakt klass kan ha slutliga, statiska eller icke-statiska eller icke-slutliga variabler. | Gränssnitt kan endast ha slutliga och statiska variabler. |
En abstrakt klass kan ge gränssnittsimplementering. | Gränssnitt kan inte implementera en abstrakt klass. |
En abstrakt klass ärvs med hjälp av nyckelordet 'extends'. | Gränssnittet implementeras med nyckelordet 'implementerar'. |
En abstrakt klass kan utöka andra klasser eller implementera flera gränssnitt. | Gränssnittet kan bara implementera ett annat gränssnitt. |
När ska man använda abstrakt klass och gränssnitt i Java
Beslutet om när man ska använda abstraktklass och när man ska använda gränssnitt i Java-applikationen bör tas på ett intelligent sätt efter att ha förstått problemet till hands. Det finns två aspekter som vi måste tänka på som visas nedan.
Abstrakta klasser med delvis beteende
Vi vet att abstrakta klasser kanske inte genomförs helt mindre. De kan ha partiellt beteende. Å andra sidan har gränssnitt ingen implementering. Så när vi måste välja mellan en abstrakt klass och en implementering, måste vi överväga denna aspekt av vår ansökan.
Detta innebär att vi först måste avgöra om applikationen som vi utformar har någon gemensam partiell implementering som vi kan separera i en abstrakt klass.
Till exempel, anser att vi utformar en webbapplikation. För detta måste vi använda en del webbteknik som Servlet, REST API etc. Nu har var och en av dessa webbtekniker några tekniker eller steg som ska implementeras oavsett vilken applikation vi utvecklar. Sedan bygger vi vår anpassade applikation.
Så i det här fallet kan den bestämda koden som webbtekniken måste utföra placeras i en abstrakt klass. Kan vi ha ett gränssnitt för detta? Nej. Detta beror på att gränssnittet inte kan implementeras.
Gränssnitt endast för kontrakt
Vi vet att gränssnitt har kontrakt eller metoder som ingår i det. Dessa metoder är bara prototyper. Vi måste implementera dessa gränssnitt i en klass och sedan åsidosätta metoderna.
hur man implementerar kö i Java
Tänk nu på kartgränssnittet för Java Collections Framework. Många klasser som HashMap, TreeMap och HashTable etc. implementerar detta gränssnitt. Var och en av dessa klasser har olika implementeringar. De har inget vanligt beteende som kan representeras i abstraktklassen.
Så vad vi gör är att vi utformar ett gränssnitt med metodprototyper och sedan implementerar var och en av klasserna.
På så sätt bör vi väga varje faktor ordentligt innan vi väljer mellan en abstrakt klass och gränssnitt.
Skillnaden mellan abstraktion och inkapsling
Låt oss diskutera några av skillnaderna mellan abstraktion och ytterligare ett viktigt inslag i OOP, dvs. inkapsling.
Abstraktion | Inkapsling |
---|---|
Process för att få och abstrahera informationen | Process för att binda informationen. |
Abstraktionstekniken är på design- eller gränssnittsnivå. | Inkapslingsmekanismen är på implementeringsnivån. |
Abstraktion döljer detaljerna. | Inkapsling binder informationen i en enhet för att säkerställa informationssäkerhet. |
Abstraktion implementeras med hjälp av abstrakta klasser och gränssnitt. | Åtkomstmodifierare, nämligen offentliga, privata och skyddade och standard spelar en roll i inkapsling. |
I abstraktion presenteras den enda abstrakta vyn för användaren medan komplexa och detaljerade data är dolda för användaren. | I inkapsling buntas data som en enhet och kan skyddas eller göras tillgängliga med åtkomstmodifierare och getter- och settermetoder. |
Vanliga frågor
F # 1) Gömmer abstraktion och data detsamma?
Svar: Nej, abstraktion och datadöljande är inte detsamma. Men båda är viktiga funktioner i objektorienterad programmering. Medan abstraktion är en process för att dölja bakgrundsdetaljerna, är datadöljande en teknik för att isolera data från direkt åtkomst.
F # 2) Vilka är fördelarna med abstraktion?
Svar: Få fördelar med abstraktion ges nedan:
- Genom att dölja bakgrundsdetaljerna och bara exponera den abstrakta vyn för användaren blir abstraktion koden enklare och mer läsbar.
- Eftersom abstraktion skyddar onödiga detaljer blir koden mindre.
- Kodunderhåll kan bli komplicerat och svårt utan abstraktion.
F # 3) Varför är abstraktion så viktigt?
Svar: Abstraktion gör att vi kan dölja bakgrundsdetaljer som är viktiga och kan leda till kaos om de läcks ut till världen. Genom att dölja bakgrundsdetaljerna och endast exponera det nödvändiga gränssnittet för användaren blir abstraktion applikationer enklare.
F # 4) Förklara abstraktion med ett realtidsexempel.
Svar: Det finns många realtidsexempel på abstraktion inklusive geometriska former, fordon etc. Ett annat exempel är ATM (Automated Teller Machine). Bankomaten stöder operationer som kontantuttag, balanskontroll, penningöverföring etc. Men vi är inte medvetna om hur dessa operationer fungerar internt.
Vi får endast en bildskärm med ett användargränssnitt för att välja och utföra nödvändiga åtgärder.
F # 5) Kan vi uppnå abstraktion utan inkapsling?
Svar: Abstraktion skyddar implementeringsdetaljerna och inkapsling döljer objektdetaljerna. Objektet är den abstrakta formen av den verkliga världen och dess detaljer döljs med hjälp av inkapsling. Således krävs inkapsling för abstraktion.
Slutsats
I denna handledning har vi diskuterat abstraktion i Java i detalj. Abstraktion är en teknik för att dölja onödiga detaljer från användaren. Användaren får endast åtkomst till de detaljer som är relevanta. Fordon eller ATM-verksamhet är klassiska exempel på abstraktioner i den verkliga världen.
När vi använder bankomat är vi bara intresserade av att utföra operationer som kontantuttag osv utan att behöva veta detaljerna om hur exakt den operationen utförs internt.
Java ger abstraktion genom abstrakta klasser och gränssnitt. Medan gränssnitt ger 100% abstraktion, ger abstrakta klasser partiell abstraktion. Valet mellan gränssnitt och abstrakta klasser bör göras beroende på vilken applikation som ska utvecklas och även vilken information som ska exponeras för användaren.
Vi diskuterade också de abstrakta metoderna i denna handledning tillsammans med skillnaderna mellan abstrakta klasser och gränssnitt.
=> Kontrollera ALLA Java-handledning här.
Rekommenderad läsning
- Java-gränssnitt och abstrakt klasshandledning med exempel
- Java-heltal och Java BigInteger-klass med exempel
- Java Scanner-klasshandledning med exempel
- Vad är Java Vector | Java Vector Class Tutorial med exempel
- Java Enum: Java-uppräkningshandledning med exempel
- Java Basics: Java Syntax, Java Class och Core Java Concepts
- JAVA-handledning för nybörjare: 100+ praktiska Java-videohandledning
- Java Iterator: Lär dig att använda Iteratorer i Java med exempel