## **封裝的基本概念:**
封裝將類的某些信息隱藏在類內部,不允許外部程序直接訪問,只能通過該類提供的方法來實現對隱藏信息的操作和訪問。例如:一臺計算機內部極其復雜,有主板、CPU、硬盤和內存, 而一般用戶不需要了解它的內部細節,不需要知道主板的型號、CPU 主頻、硬盤和內存的大小,于是計算機制造商將用機箱把計算機封裝起來,對外提供了一些接口,如鼠標、鍵盤和顯示器等,這樣當用戶使用計算機就非常方便。
## **封裝的特點:**
* 只能通過規定的方法訪問數據。
* 隱藏類的實例細節,方便修改和實現。
## **實現封裝的具體步驟如下:**
1. 修改屬性的可見性來限制對屬性的訪問,一般設為 private。
2. 為每個屬性創建一對賦值(setter)方法和取值(getter)方法,一般設為 public,用于屬性的讀寫。
3. 在賦值和取值方法中,加入屬性控制語句(對屬性值的合法性進行判斷)。
<br>
<br>
## **封裝實例一:**
在同一個文件下創建day02_encapsulation.java文件和day03_encapsulation2.java文件,在day02_encapsulation.java文件下,所封裝的代碼如下;
```
public class day02_encapsulation{
public int age;
public void Setparamete(int age){ // 這是一個方法
this.age = age;
System.out.println("我是封裝的方法,我被調用了,嗚嗚嗚");
}
}
```
day03_encapsulation2.java文件下代碼如下;
```
public class day03_encapsulation2{
public static void main(String [] args){
day02_encapsulation setparamete = new day02_encapsulation();
setparamete.Setparamete(20);
}
}
```
我們在day03_encapsulation2.java文件里面調用了day_encapsulation里面的Setparamete方法
<br>
## **封裝實例二:**
下面以一個學員類的封裝為例介紹封裝過程。一個學員的主要屬性有姓名、年齡、聯系電話和家庭住址。假設學員類為 student,示例如下:
```
public class day04_demo{
// 姓名、年齡、聯系電話和家庭住址
private String name;
private int age;
private String phone;
private String address;
public String GetName(){
return name;
}
public void setName(String name){ // void 無返回結果 null 構造方法
this.name = name;
}
public int GetAge(){
return age;
}
public void setAge(int age){
if (age < 18 || age > 40 ){
System.out.println("年齡必須在18到40之間");
this.age = 20;
}else{
this.age = age;
}
}
public String Getphone(){
return phone;
}
public void setphone(String phone){
this.phone = phone;
}
public String GetAddress(){
return address;
}
public void setaddress(String address){
this.address = address;
}
}
```
如上述代碼所示,使用 private 關鍵字修飾屬性,這就意味著除了 student 類本身外,其他任何類都不可以訪問這些屬性。但是,可以通過這些屬性的 setXxx() 方法來對其進行賦值,通過 getXxx() 方法來訪問這些屬性。
<br>
在 age 屬性的 setAge() 方法中,首先對用戶傳遞過來的參數 age 進行判斷,如果 age 的值不在 18 到 40 之間,則將 Employee 類的 age 屬性值設置為 20,否則為傳遞過來的參數值。
<br>
編寫測試類 student,在該類的 main() 方法中調用 student 屬性的 setXxx() 方法對其相應的屬性進行賦值,并調用 getXxx() 方法訪問屬性,代碼如下:
```
public static void main(String[]args){
// 調用 student 屬性的 setXxx() 方法對其相應的屬性進行賦值,并調用 getXxx() 方法訪問屬性
day04_demo demo = new day04_demo();
demo.setName("王寶釧");
demo.setAge(18);
demo.setphone("18080808080");
demo.setaddress("上海市上海徐匯區");
System.out.println("昵稱:" + demo.GetName());
System.out.println("年齡:" + demo.GetAge());
System.out.println("電話:" + demo.Getphone());
System.out.println("家庭住址:" + demo.GetAddress());
}
```
通過封裝,實現了對屬性的數據訪問限制,滿足了年齡的條件。在屬性的賦值方法中可以對屬性進行限制操作,從而給類中的屬性賦予合理的值, 并通過取值方法獲取類中屬性的值(也可以直接調用類中的屬性名稱來獲取屬性值)。
- Java自動化測試
- 第一章:Java:基礎內容
- 1.1:Java:Hello Word
- 1.2:Java:熱身
- 1.3:Java:注釋
- 1.4:Java:標識符
- 1.5:Java:常量
- 1.6:Java:基本數據類型
- 1.7:Java:引用類型
- 1.8:Java:String類
- 第二章:Java:運算符
- 2.1:Java:算數運算符
- 2.2:Java:關系運算符
- 2.3:Java:邏輯運算
- 2.4:Java:賦值運算符
- 2.5;Java:三元運算符
- 2.6:Java:位運算符
- 第三章:Java:循環控制語句
- 3.1:Java:for循環
- 3.2:Java:while循環
- 3.3:Java:switch
- 3.4:Java:if else
- 3.5:Java:練習題
- 第四章:Java:函數與全局/局部變量
- 4.1:Java:局部變量
- 4.2:Java:全局變量
- 第五章:Java:方法
- 5.1:Java:初識方法
- 5.2:Java:方法調用
- 5.3:Java:方法重載
- 5.4:Java:構造方法
- 5.5:Java:方法的注意事項
- 第六章:Java:面向對象
- 6.1:Java:小案例
- 6.2:Java:this 關鍵字
- 6.3:Java:super 關鍵字
- 6.4:Java:static 關鍵字
- 6.5:Java:final關鍵字
- 6.6:Java:instanceof 運算符
- 6.7:Java:面向對象之封裝
- 6.8:Java:面向對象之繼承
- 6.9:Java:面向對象之多態
- 第七章:Java:面向對象高級進階
- 7.1:Java:抽象類
- 7.2:Java:Java中String類
- 7.3:Java:interface接口
- 7.4:Java:ArrayList
- 7.5:Java:HashSet
- 7.6:Java:HashMap
- 7.7:Java:反射(reflection)
- 第八章:Java:日志以及異常捕獲
- 8.1:Java:log4j
- 8.2:Java:異常初識基礎
- 8.3:Java:未被捕獲的異常
- 8.4:Java:try和catch的使用
- 8.5:Java:多重catch語句的使用
- 8.6:Java:throws/throw 關鍵字
- 8.7:Java:finally關鍵字
- 8.8:Java:自定義異常
- 第九章:Java:xml and IO
- 9.1:Java:IO基本概念
- 9.2:java:properties
- 9.3:Java:xml基本介紹
- 9.4:Java:xml操作實例
- 第十章:Java:JDBC編程
- 10.1:Java:JDBC介紹
- 10.2:Java:JDBC查詢
- 10.3:Java:JDBC插入
- 10.4:Java:Batch
- 10.5:Java:JDBC連接池
- 第十一章:Java:TestNG
- 11.1:java:TestNG簡介
- 11.2:Java:TestNG小實例
- 11.3:Java:TestNG.xml文件配置
- 11.4:Java:TestNG基本注解
- 11.5:Java:TestNG注解代碼
- 11.6:Java:TestNG預期異常
- 11.7:Java:TestNG忽略測試
- 11.8:Java:TestNG超時測試
- 11.9:Java:TestNG分組測試