讓我們從另一個行爲開始吧:即使您將一個方法/變量聲明爲私有,同一個類的另一個實例也可以訪問它。沒關係,我可以忍受它。我稱這些類爲私有而非實例爲私有。在Java中,爲什麼超類方法不能從子類實例訪問受保護的或私有的方法/變量?
現在問題部分: 例如,在運行時,我希望能夠檢查this
類中的所有字符串變量都不爲null,如果它們爲null,則應將其更改爲字符串「NULL」。
我可以使用反射運行變量並獲取它們的值。但是,如果我擴展我的類並添加私有或甚至受保護的變量,則我的基類無法訪問它們。在我可以使用它們之前,我必須對變量setAccessible
。
所以請向我解釋爲什麼基類(超級類)不能從其子類訪問私有/受保護的變量。這是它的子類,所以我不明白。這背後有什麼想法?
我知道超類不應該知道它的子類,但在我的例子中它是有道理的,不是嗎?
是否因爲我不能或不應該以這種方式限制我的子類?
更新: 基礎上的答案,我想也知道:爲什麼不從視爲違反封裝的同一類訪問另一個實例的私有變量?
不,它沒有任何意義。 – 2009-05-22 19:00:55