Java方法重写实战指南:避免常见错误与最佳实践
馃毃 "涓哄暐鎴戠殑浠g爜璺戝嚭鏉ョ殑缁撴灉鍜岄鏈熶笉涓€鏍凤紵"
鏈€杩戞湁涓鍛樻嬁鐫€浠栫殑浠g爜鏉ユ壘鎴戯細"鑰佸笀浣犵湅锛屾垜杩欎釜Dog绫荤殑eat()鏂规硶鏄庢槑閲嶅啓浜嗭紝涓哄暐璋冪敤鐨勬椂鍊欒繕鏄墽琛岀埗绫荤殑鏂规硶鍟婏紵" 浣犵寽鎬庝箞鐫€锛熸墦寮€浠g爜涓€鐪嬧€斺€旇繖鍝ヤ滑鎶婃柟娉曞悕鎷奸敊浜嗭紒鐖剁被鍐欑殑鏄?code>eat()锛屽瓙绫诲啓鎴?code>eatt()銆傛墍浠ヨ鍟婏紝鈥?strong>鈥嬫柟娉曢噸鍐欑涓€閾佸緥锛氭柟娉曞悕銆佸弬鏁板垪琛ㄥ繀椤诲畬鍏ㄤ竴鑷粹€?/strong>鈥嬶紒
涓句釜姝g粡渚嬪瓙锛?/p>
java澶嶅埗class Animal { void shout() { System.out.println("鍔ㄧ墿鍙?); } } class Cat extends Animal { @Override // 馃専杩欎釜娉ㄨВ灏辨槸浣犵殑淇濆懡绗?/span> void shout() { System.out.println("鍠靛柕鍠?); } }
杩欓噷瑕佹槸鎶奀at绫荤殑shout()鏀规垚shout(int volume)锛岄偅灏变笉鏄噸鍐欒€屾槸閲嶈浇浜嗐€傚氨鍍忎綘缁欐墜鏈鸿创鑶滐紝娌″鍑嗕綅缃氨浼氳捣娉★紝涓€涓亾鐞嗭紒
馃挕 閲嶅啓鍒板簳鍦ㄥ唴瀛橀噷鍜嬭繍浣滅殑锛?/h3>
鍜变滑鐢ㄤ釜姣斿柣鐞嗚ВJVM鐨勫鐞嗘柟寮忥細鎯宠薄鐖剁被鏂规硶鏄湰姝﹀姛绉樼睄锛屽瓙绫婚噸鍐欏氨鏄湪绉樼睄杈逛笂鍐欎簡鏈€婄簿淇増銆嬨€傚綋璋冪敤鏂规硶鏃讹紝JVM浼氬厛缈讳綘鎵嬮噷鐨勫叿浣撶増鏈紙瀵硅薄瀹為檯绫诲瀷锛夛紝鎵句笉鍒版墠鍘绘煡绁栦紶鐗堟湰銆?/p>
鐪嬩釜鍐呭瓨绀烘剰鍥撅細
鐖剁被鏂规硶鍖?-> [shout()鍘熷鐗圿
瀛愮被鏂规硶鍖?-> [shout()绮句慨鐗圿
杩欐椂鍊檔ew Cat().shout()锛孞VM鐩存帴閿佸畾绮句慨鐗堝紑缁冦€備絾鏈変釜鍧戣娉ㄦ剰鈥斺€斺€?strong>鈥嬮潤鎬佹柟娉曚笉鑳介噸鍐欌€?/strong>鈥嬶紒姣斿鐖剁被鏈変釜static sleep()鏂规硶锛屽瓙绫诲氨绠楀啓涓竴妯′竴鏍风殑锛岄偅涔熸槸闅愯棌鐖剁被鏂规硶锛屼笉鏄噸鍐欍€?/p>
馃洃 浜斿ぇ浣滄鎿嶄綔鎺掕姒滐紙闄勬姠鏁戞柟妗堬級
-
鈥?strong>鈥嬪繕璁板啓@Override娉ㄨВ鈥?/strong>鈥?br/> 鍚庢灉锛氭嫾鍐欓敊璇彂鐜颁笉浜?br/> 鎶㈡晳锛氬吇鎴愭潯浠跺弽灏勮埇鍐欐敞瑙g殑涔犳儻
-
鈥?strong>鈥嬭闂潈闄愯秺鏀硅秺灏忊€?/strong>鈥?br/> 閿欒绀鸿寖锛氱埗绫绘柟娉曟槸protected锛屽瓙绫绘敼鎴恜rivate
姝g‘濮垮娍锛氬瓙绫绘柟娉曡闂潈闄?鈮?鐖剁被 -
鈥?strong>鈥嬭繑鍥炵被鍨嬩笉涓€鑷粹€?/strong>鈥?br/> 閿欒妗堜緥锛?/p>
java澶嶅埗
// 鐖剁被 Object getFood() {...} // 瀛愮被 String getFood() {...} // 缂栬瘧鎶ラ敊锛?/span>
姝g‘鍐欐硶锛氬瓙绫昏繑鍥炵被鍨嬭鏄埗绫昏繑鍥炵被鍨嬬殑瀛愮被
-
鈥?strong>鈥嬪紓甯歌秺鎶涜秺澶р€?/strong>鈥?br/> 闆峰尯锛氱埗绫绘姏IOException锛屽瓙绫绘姏Exception
閬块浄锛氬瓙绫诲紓甯歌鏄埗绫诲紓甯哥殑瀛愮被鎴栦笉鎶涘紓甯?/p> -
鈥?strong>鈥嬭鎶婇潤鎬佸綋瀹炰緥鈥?/strong>鈥?br/> 鍏稿瀷缈昏溅鐜板満锛?/p>
java澶嶅埗
class Parent { static void work() {...} } class Child extends Parent { void work() {...} // 缂栬瘧鐩存帴鎵戣 }
馃専 鏈€浣冲疄璺靛椁愶紙涓夎彍涓€姹わ級
-
鈥?strong>鈥嬫敞瑙d繚骞冲畨鈥?/strong>鈥?br/> 灏辩畻浣犺兘璁颁綇鎵€鏈夎鍒欙紝涔熻鍔″繀鍐欎笂@Override銆傚幓骞存垜浠洟闃熺粺璁¤繃锛屾病鍐欐敞瑙g殑浠g爜鏈?3%鐨勬鐜囧嚭閲嶅啓閿欒銆?/p>
-
鈥?strong>鈥嬭繑鍥炵被鍨嬭鍏煎鈥?/strong>鈥?br/> Java5寮€濮嬫敮鎸佸崗鍙樿繑鍥炵被鍨嬶紝杩欎釜绂忓埄鍒氮璐癸細
java澶嶅埗
// 鐖剁被 Animal create(){ return new Animal(); } // 瀛愮被锛堟纭ず鑼冿級 Dog create(){ return new Dog(); }
-
鈥?strong>鈥嬪紓甯稿鐞嗚娓╂煍鈥?/strong>鈥?br/> 澶勭悊涓嶄簡灏卞垾纭拺锛岀敤try-catch鍖呰捣鏉ユ瘮涔辨姏寮傚父寮猴細
java澶嶅埗
@Override void process() { try { super.process(); } catch (IOException e) { // 璁板綍鏃ュ織绛夊鐞?/span> } }
-
鈥?strong>鈥嬭闂潈闄愬埆鎶犻棬鈥?/strong>鈥?br/> 璁颁綇杩欎釜鍙h瘈锛歱ublic > protected > 榛樿 > private銆傚瓙绫绘柟娉曠殑璁块棶鏉冮檺鑷冲皯瑕佸拰鐖剁被骞崇骇锛屽氨鍍忎綘缁ф壙瀹朵骇锛屼笉鑳芥瘮鑰佺埞杩樺皬姘斿鍚э紵
馃敟 鐙鎬ц兘浼樺寲褰╄泲
鍘诲勾缁欐煇鐢靛晢绯荤粺鍋氳皟浼樻椂鍙戠幇涓鍧戯細鏈変釜绫婚噸鍐欎簡toString()鍗存病澶勭悊濂斤紝瀵艰嚧姣忓ぉ鐢熸垚800涓囨潯鏃ュ織鏃跺鑰楄垂2G鍐呭瓨锛佹纭殑濮垮娍搴旇鏄細
java澶嶅埗@Override public String toString() { return String.format("Order[id=%s,amount=%.2f]", id, amount); // 鉁呯敤鏍煎紡鍖栨帶鍒剁簿搴?/span> }
鑰屼笉鏄棤鑴戞嫾鎺ュ瓧绗︿覆銆傝繖涓紭鍖栬浠栦滑鐨勬棩蹇楁枃浠朵綋绉洿鎺ョ缉灏?7%锛?/p>
馃 鑰佺帇銇嫭瀹惰瑙?/h3>
骞蹭簡鍗佸勾Java寮€鍙戯紝瑙佽繃鏈€绂昏氨鐨勯噸鍐欎簨鏁呮槸鏈変汉閲嶅啓浜唀quals()鍗村繕浜嗛噸鍐檋ashCode()锛屽鑷?0涓囩敤鎴锋暟鎹瓨杩汬ashMap鍚庡嚭鐜板ぇ閲忛噸澶嶉敭锛佹墍浠ヨ浣忥細鈥?strong>鈥嬮噸鍐檈quals()蹇呴』閰嶅閲嶅啓hashCode()鈥?/strong>鈥嬶紝灏卞儚涔版场闈㈠繀椤婚厤鐏吙鑲狅紒
鏈€鍚庣粰涓疄鐢ㄥ缓璁細鐢↙ombok鐨凘EqualsAndHashCode娉ㄨВ鍙互涓€閿敓鎴愯繖涓や釜鏂规硶锛屾瘮鎵嬪啓闈犺氨澶氫簡銆備笉杩囪娉ㄦ剰鎺掗櫎鏌愪簺瀛楁锛屾瘮濡傝嚜澧濱D杩欑涓嶈鍙備笌姣旇緝鐨勫瓧娈点€?/p>
涓嬫濡傛灉浣犲湪浠g爜璇勫涓彂鐜版湁浜洪噸鍐欐柟娉曟病鍐欐敞瑙o紝涓嶅Θ璇蜂粬鍠濇澂濂惰尪鈥斺€旀瘯绔熶竴鏉ザ鑼舵崲涓€涓猙ug锛岃繖涔板崠琛€璧氫笉浜忥紒
本文由嘻道妙招独家原创,未经允许,严禁转载