java程序規范中會建議大家盡量將類中的屬性私有化,即定義為private變量,通過設置set和get函數來對屬性進行操作。一些人存在這樣的疑問,為什么不直接將屬性設置為public,以后調用屬性時直接通過對象進行訪問不是更方便?
當然java中這樣做有它的原因:
1 將數據與行為分離,也就是java的面向對象的概念。
對象就是屬性+行為,封裝就是把對象的私有屬性封裝起來,只有通過自己公開的行為去改變(獲得)對象內部的私有屬性信息,而那些public的方法正是面向其他對象的接口,只有通過接口去改變(獲得)對象的私有屬性
2 安全性
設想,你有一個Person類代表一個人,Person有一個char類型的sex字段表示性別,理論上,sex只接受兩個值, 'M '和 'F ',但如果你把sex字段設為public,你很難限制你的用戶只給它賦 'M '或 'F '值。將sex設為private,再用setSex()來設置性別,你就完全可以控制這種行為了。而且你還可以控制只能get不能set,或相反,但如果是public就不行了。別外有一點屬性我們可能並不希望其他用戶對我們的屬性進行寫操作,這個時候,可以直接不寫setX方法。這就是只讀屬性了。
3 編碼規范性
我們在設計類,或者作com組件時經常告訴其實coder,你只需要調用我的XX接口方法就可以了,內部我是怎么實現的,你不用管,如果面向特定的環境特定的時間段,直接將屬性聲明為public,讓外部對象訪問也未償不可,沒有面象對象思想時,我在寫C語言程序時結構中的變量是可以隨意被訪問的,因為沒有pulbic,private之分,現在我們是面向對象編程,我們需要在接口處作文章,而保護對象的私有屬性,即安全性,只有通過對外公開的接口方法去訪問在面向對象理論上認為是安全的。
4 穩定性
5 可擴展性
6 便於維護