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

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

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

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

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

1 回答

?
浮云間

TA貢獻1829條經驗 獲得超4個贊

關于為什么不可變類標準要聲明為 final class,就是為了禁止繼承,防止可變的子類對象向上轉型為父類對象,然后作為參數傳入了形參為父類的方法中,這樣,原本為不可變的父類設計的方法就有了漏洞,根據里氏代換原則,子類能夠替代父類功能,不可變父類無法保證其子類是不可變類,所以干脆禁止繼承,保證了不可變性!另一個原因,父類的方法設置成了final可以保證不會被重寫,但是子類仍然可以重載此方法,此時不可變性便被破壞了,所以一定要final class。


查看完整回答
反對 回復 2018-09-04
  • 1 回答
  • 0 關注
  • 699 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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