private引起的反思

     今天寫程序的時候突然遇到這樣的問題,在類中定義瞭如下的變量: private String name;

在其他類中new了一個對象之後,想用對象.name取得這個屬性,但是卻訪問不到,到羣裏去問,引來的是一片鄙視!!

呵呵,之後自己也感到慚愧,學了這麼久Java了,竟然這個還沒理解清除,之前總是拿private、public、protected來比,好像是懂了,現在才發現有點笑話的意思。

    現在來分析一下我出錯的原因吧。我是這樣理解的,這個屬性是private的,說明只有這個類的對象可以訪問,其他外部實例都不能訪問。自己理解是這樣的,但是發現自己真的是大錯特錯:首先外部實例不能訪問是什麼概念?這個類的對象可以訪問又是什麼概念?“只有這個類的對象可以訪問”是導致我理解出錯的原因,我是這樣想的:對啊,這個屬性是私有的,外部不能訪問,但是它也是成員變量啊,我new出來的對象當然有這個成員變量了,當然就可以用上面的方式訪問了。那麼,問你,外部實例不能訪問是指什麼,是不能用“外部對象.屬性”來訪問嗎?哈哈,好像我是這樣理解的,真的是大錯特錯啊,只要一個類提供了不是private的構造方法,那麼任何其他類的實例都可以new出一個對象,進而訪問到它的屬性,也就是在這個層面上你不可能阻止別人訪問你的屬性,那麼如果不想這個屬性被別的對象訪問怎麼辦,辦法就是設爲private,設成這樣了當然就不可能通過"對象.屬性"的方式訪問了,如果可以訪問,設爲私有有什麼用,這樣設的話,如果沒有一個pulic的getter方法,即使你得到了類的對象,你也訪問不到對象內的屬性。

   我覺得這個private說成“對外部用戶不透明,只能自己擁有”,有點沒解釋清楚,我覺得這樣理解比較好“pirvate說明只能在類中訪問,如果你沒提供一個訪問我的public訪問,你永遠都不戶看到我,即時你擁有外層包裝我的對象實例”.

發佈了16 篇原創文章 · 獲贊 0 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章