用set get與直接設為public有什麼區別

2022-01-18 04:04:39 字數 937 閱讀 4285

這事我剛學的時候也挺疑惑的。問老師就是說封裝性,不要交給外人控制,比如年齡你就要在set裡面設定判斷條件,不能隨便賦值。這麼說確實有道理,但至於每個變數都set get一下嗎,雖然說編譯器好用,但有些時候,我好像直接設定成public也沒什麼關係。

這個疑惑其實在我心裡一直沒解開,只是老師這樣教,編譯器也提供了便捷方法就一直迷迷糊糊的用了,反正大家都這樣寫。直到剛剛一段不安全的**才讓我重新思考起了這個問題。

個人認為是先有set,比如說我們有乙個age變數,但我們並不希望它被任意賦值。所以我們需要將其設定為private,提供乙個set方法防止別人給他賦個1000歲,這不成怪物了嗎?有了set之後,你將變數弄成了private別人無法直接訪問了,所以又弄了個get。也就是說如果你對變數的賦值有約束的話就應該使用set get,它們就是為了封裝而生的。

用了set get你就真的封裝好了?請看**

public class t 

public void setresults(listresults)

}

各位覺得有什麼問題嗎?好像沒啥問題,都是這樣的,順手一按編譯器就自動生成了。但其實如果你返回的是集合的話,那麼這樣子形同虛設。

t t=new t();

t.getresults().add("!!!");

t.getresults().clear();

外部修改資料還是這麼的隨意,如果我們只想讓外界讀取results,把修改的控制權放在自己手上該如何是好呢?

當然是返回乙個不可修改的集合啦:

public listgetresults()
這樣我們就將其封裝好了。所以不要直接無腦用編譯器生成set get,如同上面的例子。你不對get進行調整,就如同乙個public,完全沒有封裝起來。應該結合具體需要,編寫set get,這樣才符合初衷。

iOS關於set get方法 點語法和直接訪問

在宣告屬性時,系統會自動合成這倆個方法。而我們知道宣告屬性會有加關鍵字,這些個關鍵字的作用就是幫助系統合成你要的set或get方法 用property宣告的成員變數是乙個屬性,這個屬性是已經自己生成了例項變數,我們可以直接用下劃線訪問,而不走set或get方法 所以不會出發kvo 在自定義set和g...

用WindowManager直接顯示View

我們android平台是乙個又乙個的activity組成的,每乙個activity有乙個或者多個view構成。所以說,當我們想顯示乙個介面的時候,我們首先想到的是建立乙個activity,然後所有的操作在activity裡面實現,或者是乙個dialog或者toast。這種方式固然簡單,但是在有些情況...

直接用Qt寫soap

最近的專案裡用到了webservice,同事用的是 gsoap 來搞的.用這個本身沒什麼問題,但這貨生成的 實非人類可讀,到處都是 和 看得我眼暈.其實專案裡用的webservice很簡單,暫時只有身份驗證這乙個,所以就想能不能直接用qt搞定.說搞就搞,哪知一下就搞了1天半.把過程記錄下來,以防我的...