抽象类里的抽象方法如何现?核心步骤与代码实例解析
馃 鈥?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("杩欐槸涓€涓浘褰?);
}
}
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;
}
}
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... } }
杩欎釜妗堜緥灞曠ず浜嗭細
- 鎶借薄鏂规硶瀹氫箟缁熶竴鏀粯娴佺▼
- 鏅€氭柟娉曞鐢ㄥ叕鍏遍€昏緫锛堢敓鎴愭祦姘村彿锛?/li>
- 涓嶅悓鏀粯鏂瑰紡宸紓鍖栧疄鐜?/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>
- 鈥?strong>鈥嬩唬鐮佸鐢ㄧ巼鎻愰珮30%鈥?/strong>鈥嬶細閫氳繃鎶借薄绫诲皝瑁呭叕鍏遍€昏緫
- 鈥?strong>鈥嬮渶姹傚彉鏇存洿鐏垫椿鈥?/strong>鈥嬶細鏂板鏀粯鏂瑰紡鍙渶缁ф壙瀹炵幇锛屼笉淇敼鍘熸湁浠g爜
- 鈥?strong>鈥嬪洟闃熷崗浣滄洿瑙勮寖鈥?/strong>鈥嬶細鎶借薄鏂规硶鐩稿綋浜庡紑鍙戝绾︼紝閬垮厤瀹炵幇閬楁紡
鏈変釜鐪熷疄鏁版嵁锛氬湪閲囩敤鎶借薄绫昏璁$殑鐢靛晢绯荤粺涓紝鏂板鏀粯娓犻亾鐨勫紑鍙戞椂闂翠粠2澶╃缉鐭埌4灏忔椂锛屽洜涓烘牳蹇冩祦绋嬪凡缁忚鎶借薄鏂规硶瑙勮寖濂戒簡
涓嬫褰撲綘鐪嬪埌abstract
鍏抽敭瀛椾笉鍐嶅彂鎬电殑鏃跺€欙紝璁板緱鍥炴潵缁欒繖绡囨枃绔犵偣涓禐~ 濡傛灉杩樻湁鎼炰笉鎳傜殑缁嗚妭锛屾杩庡湪璇勮鍖虹牳闂杩囨潵锛?/p>
本文由嘻道妙招独家原创,未经允许,严禁转载