封裝、許可權修飾符、封裝的案例

直実發表於2024-11-23

1.物件導向的三大特徵

其中繼承和多型放在後面講,今天只聊封裝

.

2.封裝的介紹

舉例

如果要我們處理一堆學生的資料,我們可以直接設計一個類,將我們需要處理的資料封裝到類當中變為成員變數,然後我們直接建立兩個物件,再將資料封裝到物件中即可

.

3.封裝的好處

1.便於我們維護資料。例如剛才處理學生資料,如果直接定義一大包變數十分臃腫

2.方便使用者使用。使用者無需關心內部實現,只要知道如何使用就行

.

舉例:如同一輛車,使用者完全不需要知道汽車內部如何構建運作,使用者只需要知道怎麼開車就行

.

4.封裝的設計規範

依舊拿汽車舉例,商家會把引擎,發動機給使用者看嗎,商家只會把拉桿,方向盤暴露出給使用者,而其他沒必要的東西都會用殼子包裹隱藏,這就是合理隱藏,合理暴露


.

舉例:

如上圖,savelog方法是完全服務於call方法的,打完一次電話就會記錄,那麼savelog方法就應該被隱藏,為什麼? 如圖

我們如果沒有隱藏savelog方法,那麼使用者就有可能直接呼叫savelog方法而略過call方法,但是savelog是服務於call方法的,你連電話都沒打,你記錄什麼?因此,savelog需要被隱藏。但該怎麼隱藏呢?

我們只需要把public改成private即可,修改完以後,savelog就只能在Phone這個類裡使用,而無法在測試類使用

.

6.許可權修飾符

許可權修飾符可以修飾成員,即成員變數和成員方法

不同的許可權修飾符,所修飾的成員的許可權訪問大小不同

.

1.private

修飾的成員的訪問許可權只能在同一個類中 如圖

age只能在Student類中使用,無法在測試類中呼叫,而name可以在測試類中呼叫


當我們在Student類中呼叫age沒有報錯,並且可以在測試類中使用

.

2.(defalut)

修飾的成員的訪問許可權只能在同一個類中,同一個包中

(defalut) 是預設許可權,並不是在變數前面寫這個,而是什麼都不寫 如圖

當Student和測試Student同在project包中,訪問沒問題。當把測試類放到test的包中,訪問就報錯了

.

3.protected

修飾的成員的訪問許可權在同一個類中,同一個包中,不同包的子類中

這個之後再說

.

4.public

任意位置,但別太過分,別跨模組就行(day7和day8不同模組)

.

7.案例

如圖

年齡為-28明顯是錯誤的,但程式這裡不報錯,因此,為了資料的安全性,我們必須私有個人資訊

錯誤的資料進不來了,但正確的資料也進不來了,怎麼辦?先別急,這裡我們需要學習兩個新的方法

.

針對私有的成員變數,提供對應的set xxx 和get xxx方法

set:設定

get:獲取


如圖,我們寫了一個setAge方法,在該方法裡進行判斷年齡是否符合常理,符合則給予賦值,否則提示

1000不符合常理,所有就列印了提升,29則給予賦值,沒有提示

.

寫完setAge還沒有結束,我們會發現現在只是給使用者提供了設定年齡的渠道,但使用者現在沒有獲取年齡的渠道,無法拿著資料進行其他操作

setAge僅能用於設定,並沒有資料返回給setAge,無法用來操作

所以我們還要寫一個getAge方法


return在哪個方法,返回的值就返回給哪個方法,所以getAge收到返回值,再來一個變數接收資料即可

相關文章