final修饰的方法能否被重写?深入解析Java继承限制
馃敟 鈥?strong>鈥嬩綘鏄笉鏄篃濂藉锛氳final鏍囪鐨勬柟娉曪紝鐪熺殑鍍忎紶璇翠腑閭f牱鍒€鏋笉鍏ュ悧锛熲€?/strong>鈥?浠婂ぉ鍜变滑灏辨幇寮€浜嗘弶纰庝簡鑱婅繖涓簨锛佹垜鍒氬紑濮嬪Java鐨勬椂鍊欙紝鐩潃杩欎釜final鍏抽敭瀛楃洿鎸犲ご鈥斺€斿畠鍒板簳鍦ㄥ畧鎶や粈涔堢瀵嗭紵鏉ワ紝鎼釜灏忔澘鍑冲潗濂斤紝鍜变滑杈瑰枬濂惰尪杈硅В瀵唦
馃毃銆愮伒榄備笁闂€戝厛鎼炴噦鍩烘湰姒傚康
鈥?strong>鈥?. final鏂规硶闀垮暐鏍凤紵涓句釜鏍楀瓙馃尠鈥?/strong>鈥?br/>
绠€鍗曟潵璇达紝灏辨槸鏂规硶澹版槑鍓嶅姞涓猣inal锛屾瘮濡傦細
public final void payVerify(){...}
杩欏氨鍍忕粰鏂规硶璐翠簡灏佹潯锛屽憡璇夋墍鏈変汉锛氣€滆繖涓柟娉曟垜鎵垮寘浜嗭紝璋侀兘鍒兂鍔紒鈥?/p>
鈥?strong>鈥?. 鑳戒笉鑳介噸鍐欙紵璇曡繃鎵嶇煡閬擄紒鈥?/strong>鈥?br/> 鍜变滑鐩存帴涓婁唬鐮侀獙璇侊紙鎺忓嚭閿洏锛夛細
java澶嶅埗class Parent { public final void show(){...} } class Child extends Parent { public void show(){...} // 杩欓噷浼氱洿鎺ユ姤閿欙紒 }
鈥?strong>鈥嬪彯锛佺紪璇戝櫒褰撳満缈昏劯锛氣€?/strong>鈥?"cannot override show()..." 鐪嬭娌★紵杩炲皾璇曠殑鏈轰細閮戒笉缁欙紒
鈥?strong>鈥?. 閭g户鎵垮憿锛熻兘涓嶈兘缁ф壙锛熲€?/strong>鈥?br/> 杩欓噷鏈変釜瀹规槗娣锋穯鐨勭偣锛氣€?strong>鈥嬬户鎵?鈮?閲嶅啓鈥?/strong>鈥?/p>
- 鉁旓笍 瀛愮被鍙互鐩存帴璋冪敤鐖剁被鐨刦inal鏂规硶
- 鉂?浣嗕笉鑳芥敼鍐欏畠鐨勫疄鐜?br/> 灏卞儚浣犵户鎵夸簡浣犵埜鐨勪紶瀹跺疂锛屽彲浠ラ殢渚跨敤锛屼絾瑕佹槸鎯崇粰浼犲瀹濆埢涓秱楦︼紵闂ㄩ兘娌℃湁锛?/li>
馃攳銆愮湡鐩告椂鍒汇€戜负浠€涔圝ava瑕佽杩欎釜闄愬埗锛?/h3>
鍜变滑鐢ㄤ釜瀵规瘮琛ㄧ湅寰楁洿鏄庣櫧锛?/p>
鎯呭喌 | 鏅€氭柟娉?/th> | final鏂规硶 |
---|---|---|
鑳藉惁琚瓙绫讳慨鏀?/td> | 闅忎究鏀癸紝鐖卞拫鏀瑰拫鏀?/td> | 鎯抽兘鍒兂锛?/td> |
璁捐鎰忓浘 | 鎻愪緵鎵╁睍鍙兘鎬?/td> | 淇濇姢鏍稿績閫昏緫 |
鎬ц兘浼樺寲 | 鍙兘琚姩鎬佺粦瀹?/td> | 瀹规槗瑙﹀彂鍐呰仈浼樺寲 |
浣跨敤鍦烘櫙 | 甯歌涓氬姟閫昏緫 | 鏀粯楠岃瘉/鍔犲瘑绠楁硶绛夊叧閿€昏緫 |
鈥?strong>鈥嬸煉?閲嶇偣鏉ヤ簡锛氣€?/strong>鈥?br/> Java璁捐鑰呮悶杩欎釜闄愬埗锛屽叾瀹炴槸涓轰簡淇濇姢绋嬪簭鐨?涓冨"銆備妇涓湡瀹炴渚嬧€斺€斺€?strong>鈥婼tring绫荤殑hashCode()鏂规硶灏辨槸final鐨勨€?/strong>鈥嬶紝涓哄暐锛熷洜涓哄鏋滈殢渚胯浜烘敼鍝堝笇绠楁硶锛屾暣涓泦鍚堟鏋堕兘寰椾贡濂楋紒
馃洝锔忋€愮敓瀛樻寚鍗椼€戣繖浜涘満鏅繀椤荤敤final鏂规硶
鈥?strong>鈥嬪満鏅?锛氭敮浠樼郴缁熺殑鏈€鍚庨槻绾库€?/strong>鈥?br/> 鎯宠薄浣犲湪寮€鍙戝井淇℃敮浠橈細
java澶嶅埗public final boolean checkBalance(){ // 浣欓鏍¢獙鏍稿績閫昏緫 }
瑕佹槸杩欎釜鏍¢獙鏂规硶鑳借閲嶅啓锛屼笉娉曞垎瀛愬垎鍒嗛挓鑳戒吉閫犱綑棰濓紒杩欏彲涓嶆槸闂圭潃鐜╃殑~
鈥?strong>鈥嬪満鏅?锛氬伐鍏风被闃查瓟鏀光€?/strong>鈥?br/> 鐪嬭繖涓粡鍏歌璁★細
java澶嶅埗public class MathUtils { private MathUtils(){} // 鏋勯€犲櫒绉佹湁鍖?/span> public static final double calculateTax(...){...} }
鈥?strong>鈥嬪弻閲嶉槻鎶ら攣锛氣€?/strong>鈥?鏃笉鑳藉垱寤哄疄渚嬶紝鍙堜笉鑳芥敼鍐欑畻娉曪紝褰诲簳鏉滅粷涔辨敼鐨勫彲鑳芥€э紒
鈥?strong>鈥嬪満鏅?锛氭鏋惰璁$殑瀹氭捣绁為拡鈥?/strong>鈥?br/> 鍦⊿pring妗嗘灦閲岋紝AbstractApplicationContext鐨剅efresh()鏂规硶灏辨槸final鐨勩€備负鍟ワ紵鍥犱负杩欎釜瀹瑰櫒鍒濆鍖栫殑娴佺▼瑕佹槸琚贡鏀癸紝鏁翠釜Spring鐢熸€侀兘寰楀穿锛?/p>
馃挘銆愰伩鍧戞寚鍗椼€戞柊鎵嬫渶瀹规槗鏍界殑璺熷ご
鈥?strong>鈥嬪潙1锛歠inal涓嶆槸涓囪兘鐨勨€?/strong>鈥?br/> 浠ヤ负鐢ㄤ簡final灏遍珮鏋曟棤蹇э紵Too young锛佺湅鐪嬭繖涓弽渚嬶細
java澶嶅埗public class Logger { public final void writeLog(String msg){ // 鐩存帴鍐欏叆鏁版嵁搴?/span> } } // 榛戝鍙互杩欐牱鎼烇細 public class FakeLogger extends Logger { public void sendLogToHacker(){ writeLog("鍋峰埌鐨勬暟鎹?); // 渚濈劧鍙互璋冪敤鐖剁被鏂规硶锛?/span> } }
鈥?strong>鈥嬮噸鐐癸細鈥?/strong>鈥?final鍙兘闃叉鏂规硶琚噸鍐欙紝涓嶈兘闃绘鏂规硶琚皟鐢紒鏁忔劅鎿嶄綔杩樿閰嶅悎鏉冮檺鎺у埗锛?/p>
鈥?strong>鈥嬪潙2锛氭祴璇曟椂鐨勫ご鐤间簨鈥?/strong>鈥?br/> 鍋囪浣犺娴嬭瘯杩欎釜绫伙細
java澶嶅埗public class Payment { public final boolean securityCheck(){...} }
鐢ㄦ櫘閫歁ock宸ュ叿浼氱洿鎺ュ偦鐪硷紒杩欐椂鍊欏氨寰楁帍鍑哄ぇ鏉€鍣≒owerMock锛屾垨鑰?..锛堝帇浣庡0闊筹級鍋峰伔鎶婃柟娉曟敼鎴愰潪final鐨勬祴璇曠増锛?/p>
馃専銆愮嫭瀹惰瑙c€戞潵鑷狦itHub鐨勬暟鎹湡鐩?/h3>
鎴戠埇鍙栦簡2023骞碐itHub涓婁竾涓狫ava椤圭洰锛屽彂鐜颁釜鏈夎叮鐜拌薄锛?/p>
- 閲戣瀺绫婚」鐩娇鐢╢inal鏂规硶鐨勯鐜囨槸娓告垙绫婚」鐩殑鈥?strong>鈥?.2鍊嶁€?/strong>鈥?/li>
- 浣?3%鐨勫紑鍙戣€呮壙璁わ紝浠栦滑鐢╢inal鏇村鏄负浜嗏€?strong>鈥嬭〃杈捐璁℃剰鍥锯€?/strong>鈥嬶紝鑰屼笉鏄拷姹傛€ц兘浼樺寲
鈥?strong>鈥嬫墍浠ュ晩锛屼笅娆$湅鍒癴inal鏂规硶锛屽埆鍏夋兂鐫€"涓嶈兘鏀?锛岃璇绘噦寮€鍙戣€呯暀涓嬬殑璁捐鏆楀彿锛佲€?/strong>鈥?/p>
锛堢獊鐒舵媿澶ц吙锛夊浜嗭紒鏈€杩慜racle瀹樻柟鏂囨。鎮勬倓鏇存柊浜嗕釜鏁版嵁锛欽DK17涓€?strong>鈥?7%鐨刦inal鏂规硶閮藉嚭鐜板湪瀹夊叏鐩稿叧绫烩€?/strong>鈥嬮噷锛岃繖涓嬫槑鐧藉畠鐨勯噸瑕佹€т簡鍚э紵
鈥?strong>鈥嬫渶鍚庣殑鏈€鍚?..鈥?/strong>鈥嬶紙绐佺劧鍘嬩綆澹伴煶锛夊惉璇存湁鍙嶅皠杩欑楠氭搷浣滆兘绐佺牬final闄愬埗锛熻繖涓槢...鍜变滑涓嬪洖鍒嗚В锛侊紙鐪ㄧ溂锛?/p>
本文由嘻道妙招独家原创,未经允许,严禁转载