亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么私有 getter 方法會違反封裝性,而缺少 getter 方法則不會?

為什么私有 getter 方法會違反封裝性,而缺少 getter 方法則不會?

吃雞游戲 2023-11-10 16:18:00
我正在做 OCP 8 的一些練習題。有一個問題涉及一個具有私有字段和私有 getter 方法的類。正確的答案是這段代碼違反了封裝性,因為 getter 方法應該是公共的。public class A {    private String a;    private String getA() { return a; }}然而,另一個問題是一個具有私有字段且根本沒有 getter 方法的類。正確的答案是這段代碼遵循封裝原則。public class A {    private String a;}假設所有數據字段都是私有的,那么封裝最多到最少的順序不應該是無getter方法、私有getter方法和公共getter方法嗎?我知道我的問題聽起來可能是基于意見的,但考試不是。
查看完整描述

2 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

私有 getter 方法不違反封裝性。那只是無稽之談。


我在這里不發表意見。事實上,Java 私有方法只能在聲明它的類中調用。那是在封裝的邊界內。


要么您誤讀了 OCP 示例問題和答案,要么他們犯了錯誤。


現在,他們可能想問的是示例類是否是良好封裝的示例,或者更一般地說,是良好面向對象設計的示例。


更新


看到示例代碼,很難說是這樣還是那樣。做出判斷太不現實了。(該代碼實際上毫無用處,但除非我們知道其預期用途是什么,否則我們不能真正稱其為糟糕的設計。)


另一個答案似乎是認為私有吸氣劑是無用的。我不同意。特別是因為 getter 除了簡單地返回值之外還可以做其他事情??紤]一下:


private synchronized void setBalance(int newBalance) {

    this.balance = newBalance;

}


private synchronized int getBalance() {

    return this.balance;

}

這確保調用者將看到余額字段的當前值,即使它剛剛被另一個線程更新。當然我們可以通過其他方式做到這一點,但這種方式是很好的責任分離。


還有其他私人吸氣劑可以合法做的事情。


查看完整回答
反對 回復 2023-11-10
?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

因為,如果將 getter 設置為私有,則無法訪問另一個類中的該數據成員。我們使用 getter 來訪問另一個類中的私有數據成員。因此,如果您將 getter 設置為私有,那么該 getter 有什么用呢?



查看完整回答
反對 回復 2023-11-10
  • 2 回答
  • 0 關注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號