java萌新入門(mén)之類(lèi)繼承

1.使用繼承的原因:

提高代碼的重用性;提高程序的擴(kuò)展性。

2.java繼承的語(yǔ)法格式:

public class 類(lèi)名(子類(lèi)、派生類(lèi)、超類(lèi))? extends 類(lèi)名(父類(lèi)、基類(lèi)) {

}

注:Java類(lèi)只能繼承一個(gè)父類(lèi)(單繼承)。

3.子類(lèi)從父類(lèi)中繼承到的屬性和方法能否被調(diào)用與訪(fǎng)問(wèn)修飾符的關(guān)系:


4.方法重寫(xiě):

① 用途:子類(lèi)和父類(lèi)有同一個(gè)方法,但需要不同實(shí)現(xiàn)時(shí),使用重寫(xiě)。

② 重寫(xiě)的條件:1.必須有繼承關(guān)系;

2.子類(lèi)在重寫(xiě)父類(lèi)的方法時(shí),子類(lèi)方法的訪(fǎng)問(wèn)修飾符必須要大于或者等于父類(lèi)方法的訪(fǎng)問(wèn)修飾符;

3.子類(lèi)在重寫(xiě)父類(lèi)的方法時(shí),子類(lèi)方法的返回值類(lèi)型,方法名,參數(shù)都必須要和父類(lèi)的完全一致。

③ 調(diào)用重寫(xiě)后的方法格式:

根據(jù)new關(guān)鍵字后的類(lèi)名來(lái)決定調(diào)用的對(duì)象是誰(shuí)的——new關(guān)鍵字后類(lèi)名是子類(lèi),那么會(huì)有限調(diào)用子類(lèi)中重寫(xiě)的方法;如果子類(lèi)沒(méi)有,則執(zhí)行父類(lèi)中的方法。

④ 如果想要在子類(lèi)重寫(xiě)的方法中調(diào)用父類(lèi)中的方法,那么應(yīng)該如何實(shí)現(xiàn)?

使用super關(guān)鍵字。


練習(xí)

1.回合制對(duì)戰(zhàn)游戲:奧特曼迪迦和小怪獸哥斯拉進(jìn)行PK,直到一方的血量為0時(shí)結(jié)束戰(zhàn)斗,輸出誰(shuí)勝利了!

如果奧特曼迪迦勝利,則奧特曼迪迦要和另一個(gè)奧特曼對(duì)象進(jìn)行PK,直到一方的血量為0時(shí)結(jié)束戰(zhàn)斗,輸出誰(shuí)勝利了!

如果小怪獸哥斯拉勝利,則小怪獸哥斯拉要和另一個(gè)小怪獸對(duì)象進(jìn)行PK,直到一方的血量為0時(shí)結(jié)束戰(zhàn)斗,輸出誰(shuí)勝利了!

要求是類(lèi)中只能有一個(gè)攻擊方法,方法中也只能有一個(gè)參數(shù)。

在這一節(jié)的練習(xí)中。我本來(lái)的想法是再創(chuàng)建一個(gè)奧特曼2類(lèi)和小怪獸2類(lèi),因?yàn)樽钕葘?xiě)的攻擊方法是分別給奧特曼和小怪獸的。比如小怪獸的攻擊方法只能是面向奧特曼的。如下所示


public void attack(OutMan om){

//被攻擊方HP減少2

om.HP=om.HP-2;

? System.out.println(name+"攻擊了奧特曼"+om.name+",對(duì)方的血量減少至"+om.HP);

?if(om.HP==0){//判斷奧特曼的血量是否為零

? System.out.println(name+"作為小怪獸已經(jīng)擊敗了奧特曼"+om.name);

}

}


而建立了怪獸2類(lèi)就可以使怪獸的攻擊能面向小怪獸了。


然而我這樣的想法是錯(cuò)的。因?yàn)楸砻嫔鲜沁_(dá)到了需求,實(shí)際上增加了類(lèi)。原有的奧特曼依然不能攻擊小怪獸類(lèi)。

代碼量也很冗長(zhǎng)復(fù)雜。因?yàn)樾枰匦聦?xiě)兩個(gè)類(lèi)和兩個(gè)新的攻擊方法。

最后明白,達(dá)到原題的目的,只需要建立一個(gè)大類(lèi)(Person),和對(duì)雙方通用的攻擊方法,讓奧特曼和小怪獸成為Person的子類(lèi),去繼承過(guò)來(lái),這樣就解決了。



public void attack(Person p){

//被攻擊方HP減少

p.HP--;

System.out.println(name+"攻擊了"+p.name+",對(duì)方的血量減少至"+p.HP);

if(p.HP==0){//判斷怪獸的血量是否為零

System.out.println(name+"已經(jīng)擊敗了"+p.name);

}

}


比如奧特曼對(duì)于Person的繼承:


package OutMan2;

public class OutMan extends Person{

}


非常的簡(jiǎn)潔和簡(jiǎn)練。這使我深刻體會(huì)到繼承的好處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容