示例:學生類(名稱,年齡)。在沒有封裝對name和age的訪問時所帶來的問題。
packagebu18;
publicclasstest2 }
classstudent
輸出:年齡小於零,不合乎邏輯。但是程式執行卻是正常的,並沒有報錯。所以通過「.」直接訪問成員變數的做法是不對的。
改進(規範):
1、所有成員變數設定為private
2、所有成員變數新增getter和setter方法。通常方法都是public的。
3、 在setter中設定成員的值,而在getter方法只是作單純的顯示功能。
原則:所有的賦值語句都在set方法中,而get方法只是簡單地返回值。
classstudent
publicvoidsetage(intage)
this.
age= age; }
publicstring getname()
publicvoidsetname(string name)
} 封裝總結:
1、減少**冗餘,提高重用性
2、提供一種訪問機制,讓使用者不能直接訪問成員變數(常言道:通過公有方法來訪問私有變數)。
3、降低使用難度,使**使用更為簡單。
思考:在get方法中寫,還是在set方法中寫?
為什麼優先使用組合而不是繼承
繼承具有如下優點 實現新的類非常容易,因為基類的大部分功能都可以通過繼承關係自動賦予派生類 修改或者擴充套件繼承來的實現非常容易 只要修改父類,派生的類的行為就同時被修改了。初學物件導向程式設計的人會認為繼承真是乙個好東西,是實現復用的最好手段。但是隨著應用的深入就會發現繼承有很多缺點 繼承破壞封裝...
為什麼要繼承Serializable
最重要的兩個原因是 1 將物件的狀態儲存在儲存 中以便可以在以後重新建立出完全相同的副本 2 按值將物件從乙個應用程式域傳送至另乙個應用程式域。實現serializable介面的作用是就是可以把物件存到位元組流,然後可以恢復。所以你想如果你的物件沒實現序列化怎麼才能進行網路傳輸呢,要網路傳輸就得轉為...
為什麼要優先使用組合 而不是繼承?
繼承具有如下優點 實現新的類非常容易,因為基類的大部分功能都可以通過繼承關係自動賦予派生類 修改或者擴充套件繼承來的實現非常容易 只要修改父類,派生的類的行為就同時被修改了。初學物件導向程式設計的人會認為繼承真是乙個好東西,是實 現復用的最好手段。但是隨著應用的深入就會發現繼承有很多缺點 繼承破壞封...