Encapsulation in Java är ett grundläggande begrepp inom objektorienterad programmering (OOP) som hänvisar till buntning av data och metoder som arbetar på dessa data inom en enda enhet, vilket kallas en klass i Java. Java Encapsulation är ett sätt att dölja implementeringsdetaljerna för en klass från extern åtkomst och endast exponera ett offentligt gränssnitt som kan användas för att interagera med klassen.
I Java uppnås inkapsling genom att deklarera instansvariablerna för en klass som privata, vilket innebär att de bara kan nås inom klassen. För att tillåta extern åtkomst till instansvariablerna definieras offentliga metoder som kallas getters och setters, som används för att hämta respektive modifiera instansvariablernas värden. Genom att använda getters och seters kan klassen genomdriva sina egna datavalideringsregler och säkerställa att dess interna tillstånd förblir konsekvent.

Implementering av Java Encapsulation
Nedan är exemplet med Java Encapsulation:
Java
ladda ner youtube med vlc
// Java Program to demonstrate> // Java Encapsulation> // Person Class> class> Person {> >// Encapsulating the name and age> >// only approachable and used using> >// methods defined> >private> String name;> >private> int> age;> >public> String getName() {>return> name; }> >public> void> setName(String name) {>this>.name = name; }> >public> int> getAge() {>return> age; }> >public> void> setAge(>int> age) {>this>.age = age; }> }> // Driver Class> public> class> Main {> >// main function> >public> static> void> main(String[] args)> >{> >// person object created> >Person person =>new> Person();> >person.setName(>'John'>);> >person.setAge(>30>);> >// Using methods to get the values from the> >// variables> >System.out.println(>'Name: '> + person.getName());> >System.out.println(>'Age: '> + person.getAge());> >}> }> |
>
>Produktion
Name: John Age: 30>
Inkapsling definieras som sammanslagning av data under en enda enhet. Det är mekanismen som binder samman kod och data den manipulerar. Ett annat sätt att tänka på inkapsling är att det är en skyddande sköld som förhindrar att data nås av koden utanför denna sköld.
- Tekniskt sett i inkapsling är variablerna eller data för en klass dolda från vilken annan klass som helst och kan endast nås via någon medlemsfunktion i sin egen klass där den deklareras.
- Som vid inkapsling döljs data i en klass från andra klasser med hjälp av datadöljningskonceptet som uppnås genom att göra medlemmarna eller metoderna i en klass privata, och klassen exponeras för slutanvändaren eller världen utan att tillhandahålla några detaljer bakom implementering med hjälp av abstraktionskonceptet, så det är också känt som en kombination av datadöljande och abstraktion .
- Inkapsling kan uppnås genom att deklarera alla variabler i klassen som privata och skriva offentliga metoder i klassen för att ställa in och få värden för variabler.
- Det är mer definierat med setter och getter-metoden.
Fördelar med inkapsling
- Döljer data: det är ett sätt att begränsa åtkomsten för våra datamedlemmar genom att dölja implementeringsdetaljerna. Inkapsling ger också ett sätt att dölja data. Användaren har ingen aning om den inre implementeringen av klassen. Det kommer inte att vara synligt för användaren hur klassen lagrar värden i variablerna. Användaren kommer bara att veta att vi skickar värdena till en sättermetod och variabler initieras med det värdet.
- Ökad flexibilitet: Vi kan göra klassens variabler skrivskyddade eller skrivbara beroende på våra krav. Om vi vill göra variablerna skrivskyddade måste vi utelämna settermetoderna som setName(), setAge(), etc. från programmet ovan eller om vi vill göra variablerna skrivbara måste vi utelämna hämta metoder som getName(), getAge(), etc. från programmet ovan
- Återanvändbarhet: Inkapsling förbättrar också återanvändbarheten och är lätt att ändra med nya krav.
- Att testa kod är enkelt: Inkapslad kod är lätt att testa för enhetstestning.
- Frihet att programmera för att implementera detaljerna i systemet: Detta är en av de stora fördelarna med inkapsling att det ger programmeraren frihet att implementera detaljerna i ett system. Den enda begränsningen för programmeraren är att behålla det abstrakta gränssnittet som utomstående ser.
Till exempel: Programmeraren för redigeringsmenykoden i ett textredigeringsgränssnitt kan till en början implementera klipp- och klistraoperationerna genom att kopiera faktiska skärmbilder in och ut ur en extern buffert. Senare kan han/hon vara missnöjd med denna implementering, eftersom den inte tillåter kompakt lagring av urvalet, och den skiljer inte åt text och grafiska objekt. Om programmeraren har designat klipp-och-klistra-gränssnittet med inkapsling i åtanke, bör byte av den underliggande implementeringen till en som lagrar text som text och grafiska objekt i ett lämpligt kompakt format inte orsaka några problem för funktioner som behöver samverka med detta GUI . Sålunda ger inkapsling anpassningsförmåga, för det tillåter implementeringsdetaljerna för delar av ett program att ändras utan att negativt påverka andra delar.
Nackdelar med Encapsulation i Java
- Kan leda till ökad komplexitet, speciellt om den inte används på rätt sätt.
- Kan göra det svårare att förstå hur systemet fungerar.
- Kan begränsa flexibiliteten i genomförandet.
Exempel som visar datainkapsling i Java
Exempel 1:
Nedan är implementeringen av ovanstående ämne:
Java
rudyard kipling om förklaring
// Java Program to demonstrate> // Java Encapsulation> // fields to calculate area> class> Area {> >int> length;> >int> breadth;> >// constructor to initialize values> >Area(>int> length,>int> breadth)> >{> >this>.length = length;> >this>.breadth = breadth;> >}> >// method to calculate area> >public> void> getArea()> >{> >int> area = length * breadth;> >System.out.println(>'Area: '> + area);> >}> }> class> Main {> >public> static> void> main(String[] args)> >{> >Area rectangle =>new> Area(>2>,>16>);> >rectangle.getArea();> >}> }> |
>
>Produktion
Area: 32>
Exempel 2:
Programmet för att komma åt variabler i klassen EncapsulateDemo visas nedan:
Java
Java-serversidor
// Java program to demonstrate> // Java encapsulation> class> Encapsulate {> >// private variables declared> >// these can only be accessed by> >// public methods of class> >private> String geekName;> >private> int> geekRoll;> >private> int> geekAge;> >// get method for age to access> >// private variable geekAge> >public> int> getAge() {>return> geekAge; }> >// get method for name to access> >// private variable geekName> >public> String getName() {>return> geekName; }> >// get method for roll to access> >// private variable geekRoll> >public> int> getRoll() {>return> geekRoll; }> >// set method for age to access> >// private variable geekage> >public> void> setAge(>int> newAge) { geekAge = newAge; }> >// set method for name to access> >// private variable geekName> >public> void> setName(String newName)> >{> >geekName = newName;> >}> >// set method for roll to access> >// private variable geekRoll> >public> void> setRoll(>int> newRoll) { geekRoll = newRoll; }> }> public> class> TestEncapsulation {> >public> static> void> main(String[] args)> >{> >Encapsulate obj =>new> Encapsulate();> >// setting values of the variables> >obj.setName(>'Harsh'>);> >obj.setAge(>19>);> >obj.setRoll(>51>);> >// Displaying values of the variables> >System.out.println(>'Geek's name: '> + obj.getName());> >System.out.println(>'Geek's age: '> + obj.getAge());> >System.out.println(>'Geek's roll: '> + obj.getRoll());> >// Direct access of geekRoll is not possible> >// due to encapsulation> >// System.out.println('Geek's roll: ' +> >// obj.geekName);> >}> }> |
>
>Produktion
Geek's name: Harsh Geek's age: 19 Geek's roll: 51>
Exempel 3:
I programmet ovan är klassen Encapsulate inkapslad då variablerna förklaras privata. Get-metoderna som getAge(), getName() och getRoll() är inställda som publika, dessa metoder används för att komma åt dessa variabler. Settermetoderna som setName(), setAge(), setRoll() deklareras också som publika och används för att ställa in variablernas värden.
Nedan är implementeringen av det definierade exemplet:
Java
// Java Program to demonstrate> // Java Encapsulation> class> Name {> >// Private is using to hide the data> >private> int> age;> >// getter> >public> int> getAge() {>return> age; }> >// setter> >public> void> setAge(>int> age) {>this>.age = age; }> }> // Driver Class> class> GFG {> >// main function> >public> static> void> main(String[] args)> >{> >Name n1 =>new> Name();> >n1.setAge(>19>);> >System.out.println(>'The age of the person is: '> >+ n1.getAge());> >}> }> |
>
virtuellt minne
>Produktion
The age of the person is: 19>
Exempel 4:
Nedan är implementeringen av Java Encapsulation:
Java
// Java Program to demonstrate> // Java Encapsulation> class> Account {> >// private data members to hide the data> >private> long> acc_no;> >private> String name, email;> >private> float> amount;> >// public getter and setter methods> >public> long> getAcc_no() {>return> acc_no; }> >public> void> setAcc_no(>long> acc_no)> >{> >this>.acc_no = acc_no;> >}> >public> String getName() {>return> name; }> >public> void> setName(String name) {>this>.name = name; }> >public> String getEmail() {>return> email; }> >public> void> setEmail(String email)> >{> >this>.email = email;> >}> >public> float> getAmount() {>return> amount; }> >public> void> setAmount(>float> amount)> >{> >this>.amount = amount;> >}> }> // Driver Class> public> class> GFG {> >// main function> >public> static> void> main(String[] args)> >{> >// creating instance of Account class> >Account acc =>new> Account();> >// setting values through setter methods> >acc.setAcc_no(90482098491L);> >acc.setName(>'ABC'>);> >acc.setEmail(>'[email protected]'>);> >acc.setAmount(100000f);> >// getting values through getter methods> >System.out.println(> >acc.getAcc_no() +>' '> + acc.getName() +>' '> >+ acc.getEmail() +>' '> + acc.getAmount());> >}> }> |
>
>Produktion
90482098491 ABC [email protected] 100000.0>