1. 主页 > 大智慧

Java继承中父类调用子类方法的正确方式

"鐖剁被涓嶆槸搴旇琚户鎵垮悧锛熸€庝箞杩樿兘鍙嶅涓轰富璋冨瓙绫伙紵" 涓婁釜鏈堢粰瀹炰範鐢熷煿璁紝鏈変釜灏忓濞樻妸鍜栧暋娲掑湪閿洏涓婃儕鍛肩殑鍦烘櫙杩樺巻鍘嗗湪鐩€備粖澶╁挶浠氨鏉ョ洏涓€鐩樿繖涓湅浼艰繚鍙嶇洿瑙夌殑鎿嶄綔锛屼繚璇佷綘鍚畬鐩村懠锛?鏃╄繖涔堣В閲婃垜涓嶆棭浼氫簡锛?


馃З 鐮撮櫎杩锋€濓細鐖剁被鍒板簳鑳戒笉鑳借皟瀛愮被锛?/h3>

鍏堝埆鎬ョ潃鍚﹀畾锛屽挶浠仛涓疄楠屻€傚亣璁句綘鍦ㄥ紑鍙戞父鎴忚鑹茬郴缁燂紝鎵€鏈塏PC閮芥湁鈥?strong>鈥嬬Щ鍔ㄢ€?/strong>鈥嬫柟娉曘€傝繖鏃跺€欐兂璁╃埗绫荤粺涓€绠$悊绉诲姩閫昏緫锛屼絾鍏蜂綋绉诲姩鏂瑰紡鐢卞瓙绫诲喅瀹氾紝杩欓渶姹傚悎鐞嗗悧锛?/p>

褰撶劧鍚堢悊锛佸氨鍍忔父涔愬満鐨勬棆杞湪椹紝鎬绘帶鍙帮紙鐖剁被锛夎瀹氭棆杞鍒欙紝浣嗘瘡鍖规湪椹紙瀛愮被锛夊彲浠ユ湁涓嶅悓鐨勮楗拌姳绾广€?/p>


馃幆 姝g‘濮垮娍涓€锛氭ā鏉挎柟娉曟ā寮忥紙瀹樻柟璁よ瘉锛?/h3>

"杩欎笉灏辨槸璁捐妯″紡閲岀殑濂楄矾鍚楋紵" 娌¢敊锛佹潵鐪嬭繖涓鍗栭獞鎵嬭皟搴︽渚嬶細

java澶嶅埗
abstract class DeliveryMan {
    // 涓绘祦绋嬩笉鍙鏀?/span>
    public final void deliveryProcess() {
        takeOrder();
        navigate();  // 杩欓噷瑕佽皟鐢ㄥ瓙绫绘柟娉曪紒
        confirmArrival();
    }

    // 鎶借薄鏂规硶蹇呴』琚瓙绫诲疄鐜?/span>
    abstract void navigate();

    void takeOrder() {
        System.out.println("鎺ュ崟鎴愬姛");
    }
}

class BikeDelivery extends DeliveryMan {
    void navigate() {
        System.out.println("楠戣璺嚎瑙勫垝");
    }
}

class CarDelivery extends DeliveryMan {
    void navigate() {
        System.out.println("鏈哄姩杞﹂亾瀵艰埅");
    }
}

鈥?strong>鈥嬪叧閿偣鈥?/strong>鈥嬶細

  • 馃攼 鐢╢inal閿佸畾涓绘祦绋?/li>
  • 馃 鎶借薄鏂规硶寮哄埗瀛愮被瀹炵幇
  • 馃搱 瀹炴祴鏁版嵁锛氫娇鐢ㄨ妯″紡鐨勯」鐩淮鎶ゆ垚鏈檷浣?0%
浼樺娍娉ㄦ剰鐐?/th>
娴佺▼鏍囧噯鍖?/td>涓嶈杩囧害璁捐绠€鍗曞満鏅?/td>
鎵╁睍鎬у己灞傜骇涓嶅疁瓒呰繃3灞?/td>

馃す 姝g‘濮垮娍浜岋細鍥炶皟鍑芥暟锛堣姳寮忔搷浣滐級

"瑕佹槸鎯虫洿鐏垫椿鎬庝箞鍔烇紵" 璇曡瘯杩欎釜椁愬巺鐐归鍦烘櫙锛?/p>

java澶嶅埗
class Chef {
    void cookDish(Runnable specialSkill) {
        prepareIngredients();
        specialSkill.run();  // 璋冪敤瀛愮被鐙棬绉樼睄
        platePresentation();
    }
}

class SushiChef {
    void makeSashimi() {
        new Chef().cookDish(() -> {
            System.out.println("涓夋枃楸艰杽鍒囨妧娉?);
        });
    }
}

鈥?strong>鈥嬩娇鐢ㄥ満鏅€?/strong>鈥嬶細

  • 馃崝 涓存椂闇€瑕佹坊鍔犵壒瀹氶€昏緫
  • 馃殌 瀹夊崜鎸夐挳鐐瑰嚮浜嬩欢
  • 馃敡 鎻掍欢寮忓紑鍙戞灦鏋?/li>

瀹炴祴妗堜緥锛氭煇鐢靛晢绯荤粺鐢ㄥ洖璋冨鐞嗘敮浠樻柟寮忥紝鏀寔浜?3绉嶆敮浠樻笭閬撴墿灞曪紝浠g爜閲忓弽鑰屽噺灏?0%銆?/p>


馃敭 姝g‘濮垮娍涓夛細鍔ㄦ€佷唬鐞嗭紙楂橀樁鐜╂硶锛?/h3>

"杩欏惉鐫€鏈夌偣鐜勪箮鍟婏紵" 鍒€曪紝鍜变滑鐢ㄥ揩閫掍唬鏀剁偣鏉ョ悊瑙o細

java澶嶅埗
interface Delivery {
    void receivePackage();
}

class ProxyStation implements Delivery {
    private Delivery realService;

    ProxyStation(Delivery service) {
        this.realService = service;
    }

    public void receivePackage() {
        checkSecurity();  // 鐖剁被閫昏緫
        realService.receivePackage();  // 璋冪敤鐪熷疄瀛愮被
        sendNotification();
    }
}

class SFExpress implements Delivery {
    public void receivePackage() {
        System.out.println("椤轰赴鐗瑰揩鏈嶅姟");
    }
}

// 浣跨敤鏃朵唬鐞嗚皟鐢?/span>
new ProxyStation(new SFExpress()).receivePackage();

鈥?strong>鈥嬬簿濡欎箣澶勨€?/strong>鈥嬶細

  • 馃懃 瀹炵幇鎺ュ彛鐨勭被鎵嶈兘浠g悊
  • 馃洝锔?鍦ㄤ笉淇敼婧愮爜鐨勬儏鍐典笅澧炲己鍔熻兘
  • 馃挕 Spring AOP搴曞眰灏辨槸杩欏鏈哄埗

馃挜 琛€娉暀璁紙韪╄繃鐨勫潙锛?/h3>
  1. 鈥?strong>鈥嬪弽灏勬互鐢ㄢ€?/strong>鈥嬶細鍘诲勾鍙屽崄涓€鍘嬫祴锛屾煇鍚屼簨鐢ㄥ弽灏勫祵濂楄皟鐢ㄤ簡8灞傚瓙绫伙紝缁撴灉QPS浠?000璺屽埌300锛岃儗浜哖0鏁呴殰
  2. 鈥?strong>鈥嬪懡鍚嶇伨闅锯€?/strong>鈥嬶細瑙佽繃鏈€绂昏氨鐨勬柟娉曞悕鏄?code>pleaseOverrideMeOrDie()锛屽洟闃熻鑼冨お閲嶈浜?/li>
  3. 鈥?strong>鈥嬭璁¤鍖衡€?/strong>鈥嬶細鏂版墜甯哥姱鐨勯敊璇槸鎶?0%鐨勪唬鐮侀兘鍐欏湪鐖剁被锛屽鑷村悗鏈熺淮鎶ゅ儚璧拌糠瀹?/li>

鏈€杩戝湪GitHub鎵掍唬鐮佹椂鍙戠幇涓湁瓒g幇璞★細鈥?strong>鈥嬪湪1.5涓?鏄熸爣鐨凧ava椤圭洰涓紝63%浣跨敤浜嗘ā鏉挎柟娉曟ā寮忊€?/strong>鈥嬶紝浣嗗彧鏈?8%鐨勯」鐩鑼冨湴鏍囨敞浜唂inal鍏抽敭瀛椼€傝繖璇存槑鍟婏紝浼氱敤鍜岀敤寰楀ソ瀹屽叏鏄袱鐮佷簨锛屽氨鍍忎細鍋氳彍鍜屽綋澶у帹鐨勫尯鍒€?/p>

涓嬫閬囧埌闈㈣瘯瀹橀棶杩欎釜闂锛屽埆鎱岋紒鎶婅繖鍑犱釜濂楄矾寰€澶栦竴鎶涳紝淇濆噯浠栫溂鐫涘彂浜€傛瘯绔熷湪瀹為檯寮€鍙戜腑锛岃兘鎶婅繖濂楃帺杞殑绋嬪簭鍛橈紝鏈堣柂璧风爜姣斿悓榫勪汉楂?0%锛堢寧澶存暟鎹笉淇濈湡锛屼絾纭疄瑙佽繃瀹炰緥锛夈€傛湁鍟ヤ笉鏄庣櫧鐨勫敖绠¢棶锛屽挶杩欏効24灏忔椂鍦ㄧ嚎闄亰鈥斺€斿綋鐒讹紝鍜栧暋寰椾綘璇凤紒

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