第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

不可變類為什么需要是不可繼承的?

不可變類為什么需要是不可繼承的?

拉丁的傳說 2018-07-24 10:18:36
《Effective Java》第17條,最小可變化性里面講到了不可變類,要實現(xiàn)一個不可變類,需要以下幾點(diǎn)規(guī)則:不要提供修改對象狀態(tài)的方法確保這個類不可被繼承所有屬性都為private final確保所有任何可變組件的互斥訪問可是仔細(xì)思考,我覺得。如果遵循了其他幾點(diǎn),類是可以被繼承的。書上和其他博客都說確保這個類不可被繼承是防止子類修改了某個對象并向上轉(zhuǎn)換以父類的形式傳遞。但是父類的所有屬性都為private的,子類是無法訪問的。父類中不包含修改對象的方法,即使有,也是private的如果是這樣,那為什么還需要不可繼承呢?可能有點(diǎn)咬文嚼字,但是不思考清楚為什么~就難受
查看完整描述

1 回答

?
動漫人物

TA貢獻(xiàn)1815條經(jīng)驗 獲得超10個贊

"不可變類"不是一種語法現(xiàn)象,只是一種最佳實踐。
所謂最佳實踐,就是說推薦這么做,這么做比較好,而不是說必須這么做(否則不能編譯或者出錯)。

不可變類為什么說不允許繼承比較好呢,因為派生類的編寫者未必知道你的類要設(shè)計成不可變的,所以它可能派生你的類,引入破壞你這些原則的成員。
那么不可變類的派生類就是可變了。這可能不是你希望的。所以需要封閉掉,不允許派生。

當(dāng)然,你非要不遵頊這些原則(包括某一條別的原則)也不是不可以,只是這么做不是好的設(shè)計,或者(起碼某種條件下)達(dá)不到不可變的作用。

極端地說,所有屬性都不為private final,我就用public可以不可以,我作為調(diào)用者創(chuàng)建了對象,就不去修改了,不是也是不可變的么?如果你能相通這個問題,那么本質(zhì)上不允許繼承還是允許繼承,是一樣的道理。


查看完整回答
反對 回復(fù) 2018-07-26
  • 1 回答
  • 0 關(guān)注
  • 987 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號