文章目錄
- 一、概念
- 二、實現
- 三、測試
- 四、總結
一、概念
在面向對象編程中, 封裝從字面上來理解就是包裝的意思,特點就是信息隱藏,防止該類的代碼和數據被外部類的代碼隨機訪問。
封裝的優點:
-
良好的封裝能夠減少耦合。
-
統一接口。
-
可以保證數據的合法性。
-
隱藏信息,實現細節。
二、實現
- 修改屬性的可見性來限制對屬性的訪問(一般限制為private),例如:
public class Student {private String name;private int age;
}
這段代碼中,將 name 和 age 屬性設置為私有的,只能本類才能訪問,其他類都訪問不了,如此就對信息進行了隱藏。
- 對每個值屬性提供對外的公共方法訪問,用于對私有屬性的訪問,例如:
public class Student {private String name;private int age;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
this 關鍵字是為了解決 成員變量 和 局部變量 之間發生的同名的沖突。
三、測試
1、提供實體類
// student.java
public class Student {private String name;private int age;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
以上實例中public方法是外部類訪問該類成員變量的入口。
通常情況下,這些方法被稱為getter和setter方法。
因此,任何要訪問類中私有成員變量的類都要通過這些getter和setter方法。
2、如何訪問
// Test.java
public class Test {public static void main(String[] args) {// 1、創建對象Student student = new Student();// 2、賦值student.setName("張三");student.setAge(18);// 3、打印對象System.out.println("學生的姓名:" + student.getName() + "\n學生的年齡:" + student.getAge());}
}
運行結果:
學生的姓名:張三
學生的年齡:18
四、總結
大家看到這,可能會感覺為什么要用封裝呢,我們使用普通調用的時候,輸入任何值都是可以的,比
如:上述對象的年齡字段我不輸入18,而是-18,這顯然不合理,這有的同學就會想到,我加一層判斷不就行了,但是你要想,如果你創建一千個對象,你難道要加一千層判斷嗎?但是封裝的話,可以在類中的get/set方法,添加邏輯,如輸入一個年齡的時候,可以在類中進行一些條件限制,比如要求輸入年齡的范圍,這樣后面創建對象使用get/set方法都會走一遍你添加過的邏輯,這也是保證數據合法性的手段。