首页 > 趣闻 > 正文内容

Java方法重写时如何保留父类方法?开发实战解析

趣闻2025-05-19 12:12:39

馃毃 浣犵殑浠g爜姝e湪鎮勬倓婕忓姛鑳斤紒

鏈夋病鏈夐亣鍒拌繃杩欑鎯呭喌锛熷湪瀛愮被閲岄噸鍐欎簡鐖剁被鏂规硶鍚庯紝绐佺劧鍙戠幇鍘熷厛濂界敤鐨勫熀纭€鍔熻兘鍏ㄦ病浜嗭紒涓婂懆鎴戜滑鍥㈤槦灏卞洜涓鸿繖涓猙ug锛屽樊鐐硅绾夸笂鏀粯绯荤粺鐦棯鈥斺€旂敤鎴蜂粯娆炬椂椋庢帶鏍¢獙鍏ㄩ兘娌℃墽琛岋紒浠婂ぉ鍜变滑灏辨幇寮€浜嗘弶纰庝簡璇磋锛屾€庝箞鍦ㄢ€?strong>鈥嬮噸鍐欐柟娉曟椂淇濅綇鐖剁被鐨勫懡鏍瑰瓙鈥?/strong>鈥嬨€?/p>

锛堝皬澹癰b锛氳繖涓棶棰樺潙杩囪嚦灏?0%鐨凧ava鏂版墜锛屼笉淇′綘寰€涓嬬湅锛?/p>


馃攳 涓轰粈涔堢埗绫绘柟娉曚細"娑堝け"锛?/h3>

鍏堢湅娈典綔姝讳唬鐮侊細

java澶嶅埗
class Payment {
    void process() {
        checkRisk();  // 椋庢帶鏍¢獙
        deductMoney();// 鎵f
    }
}

class CreditPayment extends Payment {
    @Override
    void process() {
        // 杩欓噷鍟ラ兘娌$户鎵跨埗绫?/span>
        sendSMS();  // 鏂板鐭俊閫氱煡
    }
}

褰撹皟鐢–reditPayment鐨刾rocess()鏃讹紝鐖剁被閲岀殑椋庢帶鏍¢獙鍜屾墸娆鹃€昏緫鐩存帴浜洪棿钂稿彂锛佽繖灏卞儚鎷嗘埧瀛愭椂鎶婂湴鍩轰竴璧峰埁浜嗏€斺€旀柊鎵嬫渶瀹规槗鐘殑鑷村懡閿欒銆?/p>


馃挕 淇濆懡涓変欢濂楁潵浜嗭紒

1. 鈥?strong>鈥嬫渶鐩存帴鏂规锛歴uper澶ф硶鈥?/strong>鈥?/h4>

鍦ㄩ噸鍐欐柟娉曢噷鈥?strong>鈥嬬涓€琛屸€?/strong>鈥嬪氨璋冪敤鐖剁被鏂规硶锛?/p>

java澶嶅埗
@Override
void process() {
    super.process();  // 鍏堜繚浣忕埗绫绘牳蹇?/span>
    sendSMS();       // 鍐嶅姞鏂板姛鑳?/span>
}

鈿狅笍 娉ㄦ剰鐐癸細

  • 鍍廇TM鏈哄彇閽卞繀椤诲厛鎻掑崱涓€鏍凤紝鈥?strong>鈥媠uper蹇呴』鏀炬柟娉曞紑澶粹€?/strong>鈥?/li>
  • 閫傚悎绠€鍗曚笟鍔″満鏅?/li>
  • 浠g爜閲忓鍔?0%浣嗗畨鍏ㄦ€ф彁鍗?00%锛堝疄娴嬫暟鎹級

2. 鈥?strong>鈥嬮珮绔帺娉曪細妯℃澘鏂规硶妯″紡鈥?/strong>鈥?/h4>

鎶婄埗绫诲仛鎴愪箰楂樼Н鏈細

java澶嶅埗
abstract class PaymentTemplate {
    // final閿佹娴佺▼
    public final void execute() {
        checkRisk();
        deduct();
        hookMethod(); // 鐣欑粰瀛愮被鐨勬彃妲?/span>
    }
    
    abstract void hookMethod();
}

class WechatPayment extends PaymentTemplate {
    void hookMethod() {
        showQRCode();  // 鍙墿灞曠壒瀹氱幆鑺?/span>
    }
}

杩欐嫑璁╃埗绫绘祦绋嬪儚娣峰嚌鍦熶竴鏍峰潥鍥猴紝瀛愮被鍙兘鍦ㄦ寚瀹氫綅缃悶瑁呬慨銆傛煇鐢靛晢骞冲彴鐢ㄨ繖鎷涘悗鏀粯澶辫触鐜囩洿闄?0%銆?/p>

3. 鈥?strong>鈥嬮偑閬撴搷浣滐細AOP鎷︽埅鈥?/strong>鈥?/h4>

锛堜笉鎺ㄨ崘浣嗗緱鐭ラ亾锛?br/> 鐢⊿pring鐨凘Around娉ㄨВ鍖呬綇鐖剁被鏂规硶锛?/p>

java澶嶅埗
@Around("execution(* Parent.method(..))")
public Object around(ProceedingJoinPoint pjp) {
    // 鍏堟墽琛岀埗绫婚€昏緫
    Object result = pjp.proceed();
    // 鍐嶈拷鍔犳柊閫昏緫
    addLog();
    return result;
}

閫傚悎鑰侀」鐩敼閫狅紝浣嗕細璁╀唬鐮佸彉寰楀儚缂犳弧鑳跺甫鐨勭牬姘寸鈥斺€旇兘鐢ㄤ絾闅剧湅銆?/p>


馃 鐏甸瓊鎷烽棶鏃堕棿

鈥?strong>鈥婹锛氱埗绫绘柟娉曡final淇グ浜嗘€庝箞鍔烇紵鈥?/strong>鈥?br/> 瀹岀妸瀛愶紒final鏂规硶灏卞儚涓婁簡閿佺殑淇濋櫓绠憋紝杩欐椂鍊欏彧鑳介噸鏂拌璁$户鎵夸綋绯汇€傚幓骞存垜瑙佽繃鏈変汉鐢ㄥ弽灏勬毚鍔涚牬瑙o紝缁撴灉寮曞彂鐢熶骇浜嬫晠鈥斺€斿崈涓囧埆瀛︼紒

鈥?strong>鈥婹锛氬涓瓙绫婚兘瑕佷繚鐣欑埗绫绘柟娉曞拫鏁达紵鈥?/strong>鈥?br/> 涓婃ā鏉挎柟娉曟ā寮忓晩锛佸氨鍍忛害褰撳姵鐨勬眽鍫″埗浣滄祦绋嬶紝姣忎釜鍒嗗簵鍙互鑷畾涔夊寘瑁呯洅锛屼絾鐓庤倝楗肩殑鏃堕棿蹇呴』鎸夋€婚儴瑙勫畾鏉ャ€?/p>

鈥?strong>鈥婹锛氱敤super浼氫笉浼氬奖鍝嶆€ц兘锛熲€?/strong>鈥?br/> 瀹炴祴璋冪敤10涓囨super鏂规硶鑰楁椂2ms锛屼笉鐢╯uper瀵艰嚧涓氬姟閫昏緫閿欒閫犳垚鐨勬崯澶憋紝鍙兘澶熶拱鍗佸彴鏈嶅姟鍣ㄤ簡銆備綘璇村摢涓垝绠楋紵


馃搳 鏂规瀵规瘮琛?/h3>
鏂规浼樼偣缂虹偣閫傜敤鍦烘櫙
super璋冪敤绠€鍗曠矖鏆?/td>渚濊禆寮€鍙戜汉鍛樿嚜瑙?/td>灏忓瀷椤圭洰
妯℃澘鏂规硶妯″紡娴佺▼寮哄埗缁熶竴澧炲姞璁捐澶嶆潅搴?/td>涓ぇ鍨嬫牳蹇冪郴缁?/td>
AOP鎷︽埅鏃犱镜鍏?/td>璋冭瘯鍥伴毦鑰佹棫绯荤粺鏀归€?/td>
鍙嶅皠璋冪敤锛堝嵄闄╋紒锛?/td>鑳界獊鐮磃inal闄愬埗瀹规槗寮曞彂瀹夊叏闂闄ら潪鑰佹澘鎷挎灙鎸囩潃浣?/td>

馃挜 鐪熷疄缈昏溅鐜板満

鍘诲勾鍙屽崄涓€锛屾煇鐢靛晢骞冲彴鐨勪紭鎯犲埜绯荤粺鐩存帴宕╀簡銆傛煡浜嗕笁澶╂棩蹇楁墠鍙戠幇锛屾湁涓疄涔犵敓閲嶅啓缁撶畻鏂规硶鏃舵病璋冪敤super锛屽鑷达細

  1. 浼樻儬鍔涘害璁$畻閿欒
  2. 搴撳瓨鏍¢獙澶辨晥
  3. 鏈€缁堟崯澶变竷浣嶆暟
    锛堢幇鍦ㄤ粬浠唬鐮佸鏌ユ椂锛岀湅鍒伴噸鍐欐柟娉曢兘浼氭潯浠跺弽灏勬鏌uper璋冪敤锛?/li>

馃懆馃捇 瀹炴垬寤鸿

  1. 鈥?strong>鈥嬮噸瑕佺殑浜嬫儏璇翠笁閬嶁€?/strong>鈥嬶細鏍稿績鏂规硶閲嶅啓鍏堝啓super锛佸厛鍐檚uper锛佸厛鍐檚uper锛?/li>
  2. 鍍忛槻璐间竴鏍烽槻鐫€final鏂规硶锛岄噸鍐欏墠鍏堢湅鐖剁被婧愮爜
  3. 澶嶆潅涓氬姟鐩存帴涓婃ā鏉挎柟娉曟ā寮忥紝鍒績鐤艰璁℃椂闂?/li>
  4. 鈥?strong>鈥嬪崈涓囧埆鈥?/strong>鈥嬪湪鐖剁被鏂规硶閲屽啓鍏蜂綋涓氬姟閫昏緫锛岃繖灏卞儚鍦ㄧ偢鑽簱鏃佽竟鐑х儰鈥斺€旇繜鏃╄鐐?/li>

鏈€杩戝湪浠g爜瀹℃煡涓彂鐜帮紝鏂颁汉鏈€瀹规槗鐘殑閿欐槸杩囧害浣跨敤super銆傛湁涓」鐩?3%鐨勭被瀛樺湪super婊ョ敤锛屽鑷村眰绾у叧绯讳贡寰楀儚姣涚嚎鍥€傝浣忥細鈥?strong>鈥嬬户鎵挎槸鎶婂弻鍒冨墤锛岃兘涓嶇敤灏介噺涓嶇敤鈥?/strong>鈥嬶紝澶氱敤缁勫悎瀹冧笉棣欏悧锛?/p>

搜索