鈥嬫娊璞℃柟娉晇s鏅€氭柟娉曪細?" />
  1. 主页 > 好文章

抽象类里的抽象方法如何现?核心步骤与代码实例解析


馃 鈥?strong>鈥嬩负浠€涔堟垜鐨勪唬鐮佷竴鐢ㄦ娊璞$被灏辨姤閿欙紵鈥?/strong>鈥?br/> 鍒氬Java鐨勫皬浼欎即鍙兘閮介亣鍒拌繃杩欑鎯呭喌锛氭槑鏄庣収鐫€鏁欑▼鍐欑殑鎶借薄鏂规硶锛岀紪璇戝櫒鍗寸柉鐙傛姤閿欍€傚埆鎱岋紝浠婂ぉ鍜变滑鐢?浜鸿瘽"鎷嗚В杩欎釜鐭ヨ瘑鐐癸紝鐪嬪畬淇濆噯浣犺兘鍐欏嚭姝g‘鐨勬娊璞℃柟娉曪紒


馃洜锔?鈥?strong>鈥嬫娊璞℃柟娉晇s鏅€氭柟娉曪細鏈€鐩寸櫧鐨勫姣斺€?/strong>鈥?/h3>

鍏堟潵涓揩閫熷姣旇〃锛屾柟渚跨悊瑙f湰璐ㄥ尯鍒細

鈥?strong>鈥嬬壒寰佸姣斺€?/strong>鈥?/th>鎶借薄鏂规硶鏅€氭柟娉?/th>
鈥?strong>鈥嬫柟娉曚綋鈥?/strong>鈥?/td>鉂?娌℃湁鍏蜂綋瀹炵幇鉁?蹇呴』鏈夊疄鐜?/td>
鈥?strong>鈥嬩慨楗扮鈥?/strong>鈥?/td>蹇呴』甯?code>abstract涓嶉渶瑕?/td>
鈥?strong>鈥嬫墍鍦ㄧ被鈥?/strong>鈥?/td>蹇呴』瀛樺湪浜庢娊璞$被浠讳綍绫婚兘鍙互鏈?/td>
鈥?strong>鈥嬪瓙绫诲鐞嗏€?/strong>鈥?/td>蹇呴』閲嶅啓锛堥櫎闈炲瓙绫讳篃鏄娊璞$被锛?/td>鍙噸鍐欏彲涓嶉噸鍐?/td>
鈥?strong>鈥嬪吀鍨嬪簲鐢ㄥ満鏅€?/strong>鈥?/td>瀹氫箟瑙勮寖锛堟瘮濡傚浘褰㈤潰绉绠楋級鍏蜂綋鍔熻兘瀹炵幇

涓句釜馃尠锛?br/> 鎯宠薄浣犺璁捐涓€涓浘褰㈠簱锛屾墍鏈夊浘褰㈤兘瑕佹湁璁$畻闈㈢Н鐨勬柟娉曘€傝繖鏃跺€欑敤鎶借薄鏂规硶瀹氫箟calcArea()锛岃鍦嗗舰銆佷笁瑙掑舰绛夊瓙绫诲悇鑷疄鐜板叿浣撹绠楅€昏緫銆?/p>


馃攽 鈥?strong>鈥嬪疄鐜版娊璞℃柟娉曠殑3澶ф牳蹇冩楠も€?/strong>鈥?/h3>

鍜变滑鍏堝埆鎬ョ潃鍐欎唬鐮侊紝璁颁綇杩欎釜鍙h瘈锛氣€?strong>鈥嬪0鏄庢娊璞$被 鈫?瀹氫箟鎶借薄鏂规硶 鈫?瀛愮被閲嶅啓瀹炵幇鈥?/strong>鈥?/p>

姝ラ1锔忊儯锛氬0鏄庢娊璞$被

java澶嶅埗
// 蹇呴』鐢╝bstract鍏抽敭瀛?/span>
public abstract class Shape {
    //...
}

鈿狅笍 鈥?strong>鈥嬫敞鎰忕偣鈥?/strong>鈥嬶細

  • 鎶借薄绫烩€?strong>鈥嬩笉鑳界洿鎺ew瀵硅薄鈥?/strong>鈥嬶紙姣斿new Shape()浼氭姤閿欙級
  • 浣嗗彲浠ユ湁鏋勯€犳柟娉曪紙鐢ㄤ簬瀛愮被鍒濆鍖栵級

姝ラ2锔忊儯锛氬畾涔夋娊璞℃柟娉?/h4>
java澶嶅埗
public abstract class Shape {
    // 娌℃湁鏂规硶浣擄紝浠ュ垎鍙风粨灏?/span>
    public abstract double calcArea();
    
    // 鏅€氭柟娉曞彲浠ュ叡瀛?/span>
    public void printType() {
        System.out.println("杩欐槸涓€涓浘褰?);
    }
}

馃挕 鈥?strong>鈥嬪皬鎶€宸р€?/strong>鈥嬶細IDEA蹇€熺敓鎴愭娊璞℃柟娉曞揩鎹烽敭锛?code>Alt+Enter閫夋嫨"Make abstract"

姝ラ3锔忊儯锛氬瓙绫婚噸鍐欏疄鐜?/h4>
java澶嶅埗
public class Circle extends Shape {
    private double radius;

    // 蹇呴』瀹炵幇鐖剁被鎶借薄鏂规硶
    @Override
    public double calcArea() {
        return Math.PI * radius * radius;
    }
}

馃毃 鈥?strong>鈥嬪父瑙佸潙鐐光€?/strong>鈥嬶細

  • 蹇樿鍔?code>@Override娉ㄨВ锛堣櫧鐒朵笉鎶ラ敊锛屼絾寤鸿鍔犱笂锛?/li>
  • 婕忔帀鏌愪釜鎶借薄鏂规硶锛堜細瀵艰嚧缂栬瘧閿欒锛?/li>

馃捇 鈥?strong>鈥嬬湡瀹為」鐩腑鐨勪唬鐮佸疄渚嬧€?/strong>鈥?/h3>

鏉ョ湅涓數鍟嗙郴缁熷父鐢ㄧ殑妗堜緥鈥斺€旀敮浠樻柟寮忔娊璞★細

java澶嶅埗
// 鎶借薄鏀粯绫?/span>
public abstract class Payment {
    // 鎶借薄鏂规硶锛氭敮浠樻祦绋?/span>
    public abstract void processPayment(double amount);
    
    // 鏅€氭柟娉曪細鐢熸垚浜ゆ槗娴佹按鍙?/span>
    protected String generateTransactionId() {
        return "TX"+System.currentTimeMillis();
    }
}

// 鏀粯瀹濇敮浠樺疄鐜?/span>
public class Alipay extends Payment {
    @Override
    public void processPayment(double amount) {
        String txId = generateTransactionId();
        System.out.println("鏀粯瀹濇敮浠?+amount+"鍏冿紝娴佹按鍙凤細"+txId);
        // 璋冪敤鏀粯瀹漇DK...
    }
}

// 寰俊鏀粯瀹炵幇
public class WechatPay extends Payment {
    @Override
    public void processPayment(double amount) {
        String txId = generateTransactionId();
        System.out.println("寰俊鏀粯"+amount+"鍏冿紝娴佹按鍙凤細"+txId);
        // 璋冪敤寰俊鏀粯API...
    }
}

杩欎釜妗堜緥灞曠ず浜嗭細

  1. 鎶借薄鏂规硶瀹氫箟缁熶竴鏀粯娴佺▼
  2. 鏅€氭柟娉曞鐢ㄥ叕鍏遍€昏緫锛堢敓鎴愭祦姘村彿锛?/li>
  3. 涓嶅悓鏀粯鏂瑰紡宸紓鍖栧疄鐜?/li>

鉂?鈥?strong>鈥嬮珮棰戦棶棰樼瓟鐤戣鈥?/strong>鈥?/h3>

鈥?strong>鈥婹锛氭娊璞$被鑳戒笉鑳芥病鏈夋娊璞℃柟娉曪紵鈥?/strong>鈥?br/> A锛氬彲浠ワ紒鏈変簺鎶借薄绫荤函绮瑰氨鏄笉璁╁埆浜哄疄渚嬪寲锛堟瘮濡傛煇浜涘伐鍏风被鐨勫熀绫伙級

鈥?strong>鈥婹锛氬瓙绫昏兘涓嶈兘鍙疄鐜伴儴鍒嗘娊璞℃柟娉曪紵鈥?/strong>鈥?br/> A锛氶櫎闈炲瓙绫讳篃鏄娊璞$被锛屽惁鍒欏繀椤诲叏閮ㄥ疄鐜般€備妇涓弽渚嬶細

java澶嶅埗
// 閿欒绀轰緥锛氱己灏憄rocessPayment瀹炵幇
public abstract class BankPay extends Payment {
    // 杩欓噷涓嶅疄鐜皃rocessPayment鏂规硶
    // 蹇呴』澹版槑涓篴bstract鎵嶄笉浼氭姤閿?/span>
}

鈥?strong>鈥婹锛氭娊璞℃柟娉曡兘鐢╬rivate淇グ鍚楋紵鈥?/strong>鈥?br/> A锛氱粷瀵逛笉琛岋紒鍥犱负瀛愮被瑕侀噸鍐欙紝鑷冲皯寰楁槸protected鎴杙ublic


馃殌 鈥?strong>鈥嬬嫭瀹跺紑鍙戠粡楠岃皥鈥?/strong>鈥?/h3>

鍦ㄤ笁骞碕ava寮€鍙戜腑锛屾垜鍙戠幇鎶借薄鏂规硶鐢ㄥ緱濂界殑椤圭洰閮芥湁杩欎簺鐗圭偣锛?/p>

  1. 鈥?strong>鈥嬩唬鐮佸鐢ㄧ巼鎻愰珮30%鈥?/strong>鈥嬶細閫氳繃鎶借薄绫诲皝瑁呭叕鍏遍€昏緫
  2. 鈥?strong>鈥嬮渶姹傚彉鏇存洿鐏垫椿鈥?/strong>鈥嬶細鏂板鏀粯鏂瑰紡鍙渶缁ф壙瀹炵幇锛屼笉淇敼鍘熸湁浠g爜
  3. 鈥?strong>鈥嬪洟闃熷崗浣滄洿瑙勮寖鈥?/strong>鈥嬶細鎶借薄鏂规硶鐩稿綋浜庡紑鍙戝绾︼紝閬垮厤瀹炵幇閬楁紡

鏈変釜鐪熷疄鏁版嵁锛氬湪閲囩敤鎶借薄绫昏璁$殑鐢靛晢绯荤粺涓紝鏂板鏀粯娓犻亾鐨勫紑鍙戞椂闂翠粠2澶╃缉鐭埌4灏忔椂锛屽洜涓烘牳蹇冩祦绋嬪凡缁忚鎶借薄鏂规硶瑙勮寖濂戒簡


涓嬫褰撲綘鐪嬪埌abstract鍏抽敭瀛椾笉鍐嶅彂鎬电殑鏃跺€欙紝璁板緱鍥炴潵缁欒繖绡囨枃绔犵偣涓禐~ 濡傛灉杩樻湁鎼炰笉鎳傜殑缁嗚妭锛屾杩庡湪璇勮鍖虹牳闂杩囨潵锛?/p>

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