I denne opplæringen lærer du om innkapsling og skjuling av data i Java ved hjelp av eksempler.
Java innkapsling
Innkapsling er en av nøkkelegenskapene til objektorientert programmering. Innkapsling refererer til samling av felt og metoder i en enkelt klasse.
Det hindrer ytre klasser i å få tilgang til og endre felt og metoder i en klasse. Dette hjelper også til å oppnå skjuling av data .
Eksempel 1: Java Encapsulation
class Area ( // fields to calculate 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) ( // create object of Area // pass value of length and breadth Area rectangle = new Area(5, 6); rectangle.getArea(); ) )
Produksjon
Område: 30
I eksemplet ovenfor har vi opprettet en klasse med navnet Area. Hovedformålet med denne klassen er å beregne arealet.
For å beregne et område, trenger vi to variabler: lengde og bredde og en metode: getArea()
. Derfor samlet vi disse feltene og metodene i en enkelt klasse.
Her kan du også få tilgang til feltene og metodene fra andre klasser. Derfor er dette ikke dataskjuling .
Dette er bare innkapsling . Vi holder bare lignende koder sammen.
Merk : Folk anser ofte innkapsling som skjuling av data, men det er ikke helt sant.
Innkapsling refererer til samling av relaterte felt og metoder sammen. Dette kan brukes til å oppnå skjuling av data. Innkapsling i seg selv skjuler ikke data.
Hvorfor innkapsling?
- I Java hjelper innkapsling oss med å holde relaterte felt og metoder sammen, noe som gjør koden vår renere og lett å lese.
- Det hjelper å kontrollere verdiene til datafeltene våre. For eksempel,
class Person ( private int age; public void setAge(int age) ( if (age>= 0) ( this.age = age; ) ) )
Her lager vi aldersvariabelenprivate
og bruker logikk inne isetAge()
metoden. Nå kan alderen ikke være negativ. - Getter- og settermetodene gir skrivebeskyttet eller skrivebeskyttet tilgang til klassefeltene våre. For eksempel,
getName() // provides read-only access setName() // provides write-only access
- Det hjelper å koble fra komponenter i et system. For eksempel kan vi kapsle inn koden i flere bunter.
Disse frakoblede komponentene (bunt) kan utvikles, testes og feilsøkes uavhengig og samtidig. Og eventuelle endringer i en bestemt komponent har ingen innvirkning på andre komponenter. - Vi kan også oppnå skjulning av data ved hjelp av innkapsling. I eksemplet ovenfor, hvis vi endrer lengden og bredden til privat, så er tilgangen til disse feltene begrenset.
Og de holdes skjult for ytre klasser. Dette kalles dataskjuling .
Datahulling
Datahulling er en måte å begrense tilgangen til våre datamedlemmer ved å skjule implementeringsdetaljene. Innkapsling gir også en måte å skjule data på.
Vi kan bruke tilgangsmodifikatorer for å oppnå skjuling av data. For eksempel,
Eksempel 2: Skjuling av data ved bruk av den private spesifikatoren
class Person ( // private field private int age; // getter method public int getAge() ( return age; ) // setter method public void setAge(int age) ( this.age = age; ) ) class Main ( public static void main(String() args) ( // create an object of Person Person p1 = new Person(); // change age using setter p1.setAge(24); // access age using getter System.out.println("My age is " + p1.getAge()); ) )
Produksjon
Min alder er 24
I eksemplet ovenfor har vi en private
feltalder. Siden det er private
det, kan det ikke nås fra utenfor klassen.
For å få tilgang til alder har vi brukt public
metoder: getAge()
og setAge()
. Disse metodene kalles getter og setter metoder.
Å gjøre alderen privat tillot oss å begrense uautorisert tilgang utenfor klassen. Dette skjuler seg data .
Hvis vi prøver å få tilgang til aldersfeltet fra hovedklassen, får vi en feil.
// error: age has private access in Person p1.age = 24;