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

浮云間
TA貢獻1829條經驗 獲得超4個贊
關于為什么不可變類標準要聲明為 final class,就是為了禁止繼承,防止可變的子類對象向上轉型為父類對象,然后作為參數傳入了形參為父類的方法中,這樣,原本為不可變的父類設計的方法就有了漏洞,根據里氏代換原則,子類能夠替代父類功能,不可變父類無法保證其子類是不可變類,所以干脆禁止繼承,保證了不可變性!另一個原因,父類的方法設置成了final可以保證不會被重寫,但是子類仍然可以重載此方法,此時不可變性便被破壞了,所以一定要final class。
添加回答
舉報
0/150
提交
取消