我的問題涉及Java,但它也可以應用於C#。我想知道爲什麼每個人都建議使實例變量私有而不是使它們變爲保護。爲什麼建議將實例變量聲明爲私有?
讓我們考慮一下吧。私有變量沒有被子類看到,所以如果我需要訪問或更改我的子類中超類的變量,我不得不使用一些訪問器和增變器方法,如getMyPrivateVariable
或setMyPrivateVariable
。但是當你擴展某個類並繼承它的成員時,這就像你直接在子類中聲明它們一樣。因此,從邏輯上講,這意味着子類也應該可以直接訪問實例變量,併爲設計具有受保護變量的類提供了一個案例。我知道這樣的做法會破壞封裝,但這在繼承的情況下似乎是無關緊要的,因爲在這種情況下,所有情況都好像是超級成員在sublcass中聲明的一樣,所以sublcass擁有「自然權利」能夠直接訪問其成員,而不管它們是否被繼承。在我看來,封裝對於通過對象繼承樹之外的其他對象與對象接口更重要。
所以,我的問題是爲什麼大家建議將類的實例變量聲明爲私有而不是保護?
這是一個適合programmers.stackexchange.com而不是StackOverflow的問題。 – m3th0dman
不是_everyone_。但從你的文本看來,你有點'保護';無論如何,做你認爲正確的事。 – fge
僅僅因爲一個類允許繼承並不意味着它想允許子類對其內部不變式的任意腐敗。使字段(和一些方法)「私人」允許這一點。 – dlev