Java Encapsulation
Zapouzdření
Smyslem Encapsulation je zajistit, aby "citlivá" data byla před uživateli skryta. Abyste toho dosáhli, musíte:
- deklarovat proměnné/atributy třídy jako
private
- poskytují veřejné metody get
a set pro přístup a aktualizaci hodnoty
private
proměnné
Získejte a nastavte
Z předchozí kapitoly jste se dozvěděli, že k private
proměnným lze přistupovat pouze v rámci stejné třídy (externí třída k nim nemá přístup). Je však možné k nim přistupovat, pokud poskytujeme veřejné metody získávání a nastavení .
Metoda get
vrací hodnotu proměnné a set
metoda nastavuje hodnotu.
Syntaxe obou je taková, že začínají buď get
nebo set
, za kterým následuje název proměnné, přičemž první písmeno je velké:
Příklad
public class Person {
private String name; // private = restricted access
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String newName) {
this.name = newName;
}
}
Příklad vysvětlen
Metoda get
vrací hodnotu proměnné name
.
Metoda set
vezme parametr ( newName
) a přiřadí jej
name
proměnné. Klíčové this
slovo se používá k odkazování na aktuální objekt.
Protože je však name
proměnná deklarována jako private
, nemůžeme
k ní přistupovat mimo tuto třídu:
Příklad
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.name = "John"; // error
System.out.println(myObj.name); // error
}
}
Pokud byla proměnná deklarována jako public
, očekávali bychom následující výstup:
John
Při pokusu o přístup k private
proměnné se však zobrazí chyba:
MyClass.java:4: error: name has private access in Person
myObj.name = "John";
^
MyClass.java:5: error: name has private access in Person
System.out.println(myObj.name);
^
2 errors
Místo toho používáme metody getName()
a setName()
pro přístup a aktualizaci proměnné:
Příklad
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.setName("John"); // Set the value of the name variable to "John"
System.out.println(myObj.getName());
}
}
// Outputs "John"
Proč zapouzdření?
- Lepší kontrola atributů tříd a metod
- Atributy třídy lze nastavit pouze pro čtení (pokud používáte pouze
get
metodu) nebo pouze pro zápis (pokud používáte pouzeset
metodu) - Flexibilní: programátor může změnit jednu část kódu, aniž by ovlivnil ostatní části
- Zvýšená bezpečnost dat