1. 主页 > 大智慧

Java方法重写规范详解:3个必知注意事项与实战示例

锛堟媿妗岋級鍚勪綅鍒氬叆鍧慗ava鐨勫皬鐧戒滑锛佷粖澶╁挶浠亰涓€涓綘浠粷瀵硅俯杩囧潙鐨勮瘽棰樷€斺€旀柟娉曢噸鍐欍€傛兂璞′竴涓嬶細浣犲啓鐨勫瓙绫绘柟娉曟娲讳笉鎵ц锛岃皟浜嗗崐澶╁彂鐜扮埗绫绘柟娉曡繕鍦ㄨ窇锛屾槸涓嶆槸姘斿緱鎯崇牳閿洏锛燂紙绗戯級鍒厡锛屼粖澶╄繖绡囦繚浣犳悶鎳傦紒


涓€銆佸厛鏁存槑鐧斤細鏂规硶閲嶅啓鍒板簳鏄釜鍟ワ紵

涓句釜鏍楀瓙馃尠锛氫綘瀹跺吇浜嗗彧鐚富瀛愶紝瀹冪户鎵夸簡"鍔ㄧ墿"鐨勫悆楗柟娉曘€備絾涓诲瓙瑕佺敤鐚伯纰楀悆楗紝鎬讳笉鑳藉拰鏅€氬姩鐗╀竴鏍风敤鐮寸鍚э紵杩欐椂鍊欏氨寰楅噸鍐檈at()鏂规硶锛?/p>

锛堟暡榛戞澘锛夆€?strong>鈥嬪畼鏂瑰畾涔夆€?/strong>鈥嬶細褰撳瓙绫婚渶瑕佹敼鍙樼埗绫绘柟娉曠殑鍏蜂綋瀹炵幇鏃讹紝鍦ㄥ瓙绫婚噷閲嶆柊瀹氫箟鐩稿悓鍚嶇О銆佸弬鏁板垪琛ㄧ殑鏂规硶锛岃繖灏辨槸鏂规硶閲嶅啓锛圤verride锛夈€傚氨鍍忕粰鎵嬫満绯荤粺鍗囩骇鍔熻兘锛屼絾淇濈暀鍘熸湁鐨勬搷浣滅晫闈€?/p>

锛堜綘鍙兘浼氶棶锛夐偅鍜岄殧澹佽€佺帇瀹剁殑鏂规硶閲嶈浇鍟ュ尯鍒紵绠€鍗曡锛?/p>

  • 閲嶈浇锛氣€?strong>鈥嬪悓涓€涓被閲屸€?/strong>鈥嬶紝鏂规硶鍚嶇浉鍚屽弬鏁颁笉鍚岋紙濂芥瘮鐢ㄥ井娉㈢倝鍔犵儹涓嶅悓椋熸潗锛?/li>
  • 閲嶅啓锛氣€?strong>鈥嬬埗瀛愮被涔嬮棿鈥?/strong>鈥嬶紝鏂规硶鍚嶅弬鏁伴兘鐩稿悓锛堝ソ姣旂粰寰尝鐐夋崲涓柊娆炬搷浣滈潰鏉匡級

浜屻€佸繀椤诲埢杩汥NA鐨?澶ч搧寰?/h3>

锛堟帍鍑哄皬鏈湰璁板ソ浜嗭紒锛?/p>

1. 鍙傛暟蹇呴』"澶嶅埗绮樿创"

灏卞儚缃戣喘瑕佸~瀵规敹璐у湴鍧€锛屸€?strong>鈥嬫柟娉曠鍚嶅繀椤诲拰鐖剁被瀹屽叏涓€鑷粹€?/strong>鈥嬨€備妇涓炕杞︽渚嬶細

java澶嶅埗
// 鐖剁被
public void feed(String foodType) {...}

// 瀛愮被閿欒绀鸿寖
public void feed(String foodName) {...} // 鍙傛暟鍚嶄笉鍚岋紵鐓ф牱GG锛?/span>

锛堟儕涓嶆儕鍠滐紵锛夊弬鏁板悕绉伴殢渚挎敼娌″叧绯伙紵澶ч敊鐗归敊锛丣VM鍙鍙傛暟绫诲瀷鍜岄『搴忥紝灏辩畻浣犳妸鍙傛暟鍚嶄粠foodType鏀规垚foodName锛岀紪璇戝櫒鐓ф牱褰撲綘娌¢噸鍐欙紒


2. 璁块棶鏉冮檺涓嶈兘"闄嶇骇"

杩欒鐭╁氨鍍忓叕鍙歌亴绾р€斺€斺€?strong>鈥嬪瓙绫绘柟娉曠殑璁块棶鏉冮檺涓嶈兘姣旂埗绫绘洿涓ユ牸鈥?/strong>鈥嬨€備妇涓湡瀹炴儴妗堬細

java澶嶅埗
// 鐖剁被
protected void cleanLitterBox() {...}

// 瀛愮被閿欒绀鸿寖
void cleanLitterBox() {...} // 浠巔rotected闄嶇骇鎴愰粯璁ゆ潈闄愶紵鐩存帴鎶ラ敊锛?/span>

锛堢獊鐒舵縺鍔級瑙佽繃鏈変汉鎶妏ublic鏀规垚private鐒跺悗debug涓ゅ皬鏃跺悧锛熸垜瑙佽繃锛佸氨鍍忔妸鍒澶ч棬鎹㈡垚鐙楁礊锛屼綘璇磋兘涓嶈繘寰楀幓鍚楋紵


3. 杩斿洖鍊肩被鍨嬭"闂ㄥ綋鎴峰"

鑷粠Java5鍑轰簡鍗忓彉杩斿洖绫诲瀷锛岃繖涓潙鏇存繁浜嗭紒鍒掗噸鐐癸細

  • 鈥?strong>鈥嬪熀鏈被鍨嬧€?/strong>鈥嬶細蹇呴』瀹屽叏鐩稿悓锛坕nt涓嶈兘鏀规垚long锛?/li>
  • 鈥?strong>鈥嬪璞$被鍨嬧€?/strong>鈥嬶細鍙互鏄埗绫昏繑鍥炵被鍨嬬殑瀛愮被锛堣繖鍙崗鍙橈級

涓句釜绁炴搷浣滐細

java澶嶅埗
// 鐖剁被
public Animal getPet() {...}

// 瀛愮被姝g‘绀鸿寖
public Cat getPet() {...} // Cat鏄疉nimal鐨勫瓙绫伙紝绋筹紒

锛堢獊鐒跺皬澹帮級鎮勬倓璇翠釜鍐风煡璇嗭細鍏跺疄杩斿洖鍊肩被鍨嬩笉鍚屼細鐩存帴缂栬瘧鎶ラ敊锛屽崗鍙樿繑绫诲瀷鏄敮涓€鐨勪緥澶栭€氶亾銆?/p>


涓夈€佸疄鎴橈紒鎵嬫妸鎵嬫暀浣犻伩鍧?/h3>

锛堟潵鏉ユ潵锛屼笂纭彍锛侊級

鈻嶅満鏅?锛欯Override娉ㄨВ鍗冧竾鍒渷锛?/h4>

瑙佽繃杩欑杞︾ジ鐜板満鍚楋紵

java澶嶅埗
public class Cat extends Animal {
    public void Eat(String food) { // 鏂规硶鍚嶉瀛楁瘝澶у啓锛?/span>
        System.out.println("鍚?+food);
    }
}

锛堢棝蹇冪柧棣栵級娌″姞@Override娉ㄨВ锛岀紪璇戝櫒鏍规湰涓嶄細鍛婅瘔浣燛at涓嶆槸eat锛佺瓑杩愯鏃跺彂鐜扮埗绫绘柟娉曟病琚鐩栵紝鍝兘鏉ヤ笉鍙婏紒

姝g‘濮垮娍锛?/p>

java澶嶅埗
@Override // 杩欎釜鏁戝懡绗︿竴瀹氳鍔?/span>
public void eat(String food) {...}

鈻嶅満鏅?锛氬紓甯稿鐞嗚璋ㄦ厧

澶勭悊寮傚父灏卞儚鎷嗙偢寮光€斺€斺€?strong>鈥嬪瓙绫绘柟娉曚笉鑳芥姏鍑烘瘮鐖剁被鏇村娉涚殑寮傚父鈥?/strong>鈥嬨€備妇涓嵄闄╂搷浣滐細

java澶嶅埗
// 鐖剁被
public void play() throws IOException {...}

// 瀛愮被閿欒绀鸿寖
public void play() throws Exception {...} // Exception姣擨OException鑼冨洿澶э紝鐩存帴鐐革紒

锛堢獊鐒舵彁楂橀煶閲忥級璁颁綇锛佽涔堟姏鍑虹浉鍚屽紓甯革紝瑕佷箞涓嶆姏锛岃涔堟姏瀹冪殑瀛愮被寮傚父銆傚氨鍍忔壙璇?鍙憯浣犵殑鎵嬫満"绐佺劧鏀规垚"鐮镐綘鍏ㄥ瀹剁數"锛岃繖璋佽兘绛斿簲锛?/p>


鈻嶅満鏅?锛氶潤鎬佹柟娉曞埆鐬庢姌鑵?/h4>

閲嶈鐨勪簨鎯呰涓夐亶锛氣€?strong>鈥嬮潤鎬佹柟娉曚笉鑳介噸鍐欙紒涓嶈兘閲嶅啓锛佷笉鑳介噸鍐欙紒鈥?/strong>鈥?杩欑帺鎰忓彨鏂规硶闅愯棌锛圡ethod Hiding锛夛紝鏉ョ湅杩锋儜琛屼负澶ц祻锛?/p>

java澶嶅埗
class Animal {
    static void sleep() { System.out.println("鍔ㄧ墿鐫¤"); }
}

class Cat extends Animal {
    static void sleep() { System.out.println("鐚洞鐫€鐫?); } // 杩欎笉鏄噸鍐欙紒
}

锛堟憡鎵嬶級褰撲綘鐢ˋnimal animal = new Cat(); animal.sleep()鏃讹紝杈撳嚭鐨勮繕鏄?鍔ㄧ墿鐫¤"銆傛儕涓嶆儕鍠滐紵杩欏氨鏄负浠€涔堟垜浠父璇?闈欐€佹柟娉曟病鏈夊鎬佹€?銆?/p>


鍥涖€佷釜浜鸿俯鍧戣娉彶

锛堟憳涓嬬爜鍐滅殑鍋囧彂璇村彞鎺忓績绐濈殑锛夊垰瀛ava閭d細鍎匡紝鎴戝湪鏂规硶閲嶅啓涓婃牻鐨勮窡澶磋兘缁曞湴鐞冧笁鍦堛€傛渶鎯ㄧ殑涓€娆℃槸缁橝ndroid鐨刼nCreate()鏂规硶鍔犲弬鏁帮紝debug鍒板噷鏅ㄤ笁鐐规墠鍙戠幇娌℃纭噸鍐欌€斺€斿氨鍥犱负鎴戞墜璐辨妸鍙傛暟鏀规垚浜唅nt绫诲瀷锛?/p>

鍚庢潵鍏绘垚涓変釜鏁戝懡涔犳儻锛?/p>

  1. 鏃犺剳鍏堟暡@Override娉ㄨВ锛岃缂栬瘧鍣ㄥ綋鐩戝伐
  2. 鐢↖DEA鐨凜trl+O蹇嵎閿敓鎴愰噸鍐欐柟娉曟鏋?/li>
  3. 鍗曞厓娴嬭瘯鏃跺繀娴嬬埗绫诲紩鐢ㄦ寚鍚戝瓙绫诲璞$殑鎯呭喌

锛堢獊鐒舵缁忥級鏂规硶閲嶅啓灏卞儚姝︿緺灏忚閲岀殑浼犲姛鈥斺€斿墠杈堟妸鎷涘紡鍚嶇О浼犵粰浣狅紝浣嗗叿浣撴€庝箞杩愬姛寰楃湅浣犵殑閫犲寲銆傛帉鎻″ソ杩欎釜鏍稿績鏈哄埗锛屾墠绠楃湡姝f懜鍒伴潰鍚戝璞$紪绋嬬殑闂ㄩ亾銆傚埆鎬曠幇鍦ㄨ杩欎簺瑙勫垯鎼炲緱澶村ぇ锛岀瓑浣犲啓鍑虹涓€涓畬缇庤繍琛岀殑@Override鏂规硶鏃讹紝閭g鐖芥劅...锛堢瑧锛夎瘯杩囧氨鐭ラ亾锛?/p>

锛堝叏鏂囧畬锛?/p>

本文由嘻道妙招独家原创,未经允许,严禁转载