封裝
概念:是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。是面向對象三大特征之一。
好處:將變化隔離。提高重用性。提高安全性。
封裝原則:
• 將不需要對外提供的內容都隱藏起來。
• 把屬性都隱藏,提供公共方法對其訪問。
Java中可以通過對類的成員設置一定的訪問權限,實現類中成員的信息隱藏。
如下面的這個student類,就是使用了封裝,將類中的屬性name 、age和score私有化,使外部不能直接訪問他們,只能通過public類型的對他們方法進行操作。
class Student { private String name;//聲明屬性 ,並設為私有類型,起到封裝的作用 private int sex; public String getName() { //設置getter方法,因為變量設為了私有,對象無法訪問類中的屬性,需要用getter方法獲取變量 return name; } public void setName(String name) { //設置setter方法,因為變量設為了私有,對象無法訪問類中的屬性,需要用setter方法給變量賦值 this.name = name; } public int getSex() { return sex; } public void setAge(int age) { this.age = age; } }
java中這樣做的原因:
- 將數據與行為分離,也就是java的面向對象的概念。
對象就是屬性+行為,封裝就是把對象的私有屬性封裝起來,只有通過自己公開的行為去改變(獲得)對象內部的私有屬性信息,而那些public的方法正是面向其他對象的接口,只有通過接口去改變(獲得)對象的私有屬性。
- 安全性
設想,上面的student類的sex字段表示性別,理論上,sex只接受兩個值, '0 '和 '1 ',但如果你把sex字段設為public,你很難限制你的用戶只給它賦 '0 '或 '1 '值。將sex設為private,再用setSex()來設置性別,你就完全可以控制這種行為了。而且你還可以控制只能get不能set,或相反,但如果是public就不行了。別外有一點屬性我們可能並不希望其他用戶對我們的屬性進行寫操作,這個時候,可以直接不寫setX方法。這就是只讀屬性了。