指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。
- 可被其他程序創建對象後訪問,容易造成不確定性和安全隱患。
public class Person {
int age;
void talk() {
System.out.println("age = " + age);
}
}
public class PersonDemo {
public static void main(String[] args) {
Person p = new Person();
p.age = -10;
p.talk();
}
age = -10; //年齡不可能為負數,不合要求。
public class Person {
private int age;//將 age 變為私有的
//透過getter與setter獲取以及改變參數值
public void setAge(int a) {
//可透過 if 或其他語句對年齡的賦值條件進行限制
if(a > 0 && a < 100) {
age = a;
talk();
} else {
System.out.println("Invalid input");
}
}
public int getAge() {
return age;
}
void talk() {
System.out.println("age = " + age);
}
}
public class PersonDemo {
public static void main(String[] args) {
Person p = new Person();
//p.age = -10; age 不可被直接訪問
p.setAge(20);
p.setAge(-10);
System.out.println(10 + p.getAge());//如果要獲取被封裝後的變量值可以調用此方法
}
age = 20
Invalid input
age = 30;
- 提高重用性。
- 提高安全性。
- 將變化隔離。
- 便於使用。
- 將不需要對外提供的內容都隱藏起來。
- 把屬性都隱藏,提供公共方法對其訪問。
- 有些情況下可不必提供公共方法。EX: 之前學過的幾種排序方法,元素交換位置的方法就可設置為 private 的,因其只提供排序方法進行交換位置的動作,可不必對外提供。 ##private
- 私有,是一個權限修飾符,用於修飾成員變量 (不可用於修飾局部變量), 私有的內容只在本類中有效。
- 對外提供對應的 getXXX() 和 setXXX() 方法
- 注意: 私有僅僅是封裝的一種體現而已。(私有是封裝,但封裝不一定是私有)