- 首頁(yè)|
- 網(wǎng)校|
- 焚題庫(kù)|
- APP |
-
微信公眾號(hào)
在子類中如果創(chuàng)建了一個(gè)與父類中相同名稱、相同返回值類型、相同參數(shù)列表的方法,只是方法體中的實(shí)現(xiàn)不同,以實(shí)現(xiàn)不同于父類的功能,這種方式被稱為方法重寫(xiě)(override),又稱為方法覆蓋。當(dāng)父類中的方法無(wú)法滿足子類需求或子類具有特有功能的時(shí)候,需要方法重寫(xiě)。
子類可以根據(jù)需要,定義特定于自己的行為。既沿襲了父類的功能名稱,又根據(jù)子類的需要重新實(shí)現(xiàn)父類方法,從而進(jìn)行擴(kuò)展增強(qiáng)。
在重寫(xiě)方法時(shí),需要遵循下面的規(guī)則:
參數(shù)列表必 須完全與被重寫(xiě)的方法參數(shù)列表相同。
返回的類型必 須與被重寫(xiě)的方法的返回類型相同(Java1.5 版本之前返回值類型必 須一樣,之后的 Java 版本放寬了限制,返回值類型必 須小于或者等于父類方法的返回值類型)。
訪問(wèn)權(quán)限不能比父類中被重寫(xiě)方法的訪問(wèn)權(quán)限更低(public>protected>default>private)。
重寫(xiě)方法一 定不能拋出新的檢査異常或者比被重寫(xiě)方法聲明更加寬泛的檢査型異常。例如,父類的一個(gè)方法聲明了一個(gè)檢査異常 IOException,在重寫(xiě)這個(gè)方法時(shí)就不能拋出 Exception,只能拋出 IOException 的子類異常,可以拋出非檢査異常。
另外還要注意以下幾條:
重寫(xiě)的方法可以使用 @Override 注解來(lái)標(biāo)識(shí)。
父類的成員方法只能被它的子類重寫(xiě)。
聲明為 final 的方法不能被重寫(xiě)。
聲明為 static 的方法不能被重寫(xiě),但是能夠再次聲明。
構(gòu)造方法不能被重寫(xiě)。
子類和父類在同一個(gè)包中時(shí),子類可以重寫(xiě)父類的所 有方法,除了聲明為 private 和 final 的方法。
子類和父類不在同一個(gè)包中時(shí),子類只能重寫(xiě)父類的聲明為 public 和 protected 的非 final 方法。
如果不能繼承一個(gè)方法,則不能重寫(xiě)這個(gè)方法。
例 1
每種動(dòng)物都有名字和年齡屬性,但是喜歡吃的食物是不同的,比如狗喜歡吃骨頭、貓喜歡吃魚(yú)等,因此每種動(dòng)物的介紹方式是不一樣的。
下面編寫(xiě) Java 程序,在父類 Animal 中定義 getInfo() 方法,并在子類 Cat 中重寫(xiě)該方法, 實(shí)現(xiàn)貓的介紹方式。父類 Animal 的代碼如下:
public class Animal {
public String name; // 名字
public int age; // 年齡
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public String getInfo() {
填寫(xiě)下面表單即可預(yù)約申請(qǐng)免費(fèi)試聽(tīng)java課程!害怕學(xué)不會(huì)?助教陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可全國(guó)推薦就業(yè)!
return "我叫" + name + ",今年" + age + "歲了。";
}
}
子類 Cat 的代碼如下:
public class Cat extends Animal {
private String hobby;
public Cat(String name, int age, String hobby) {
super(name, age);
this.hobby = hobby;
}
public String getInfo() {
return "喵!大家好!我叫" + this.name + ",我今年" + this.age + "歲了,我愛(ài)吃" + hobby + "。";
}
public static void main(String[] args) {
Animal animal = new Cat("小白", 2, "魚(yú)");
System.out.println(animal.getInfo());
}
}
如上述代碼,在 Animal 類中定義了一個(gè)返回值類型為 String、名稱為 getInfo() 的方法,而 Cat 類繼承自該類,因此 Cat 類同樣含有與 Animal 類中相同的 getInfo() 方法。但是我們?cè)?Cat 類中又重新定義了一個(gè) getInfo() 方法,即重寫(xiě)了父類中的 getInfo() 方法。
在 main() 方法中,創(chuàng)建了 Cat 類的對(duì)象 animal,并調(diào)用了 getInfo() 方法。輸出的結(jié)果如下:
喵!大家好!我叫小白,我今年2歲了,我愛(ài)吃魚(yú)。
如果子類中創(chuàng)建了一個(gè)成員變量,而該變量的類型和名稱都與父類中的同名成員變量相同,我們則稱作變量隱藏。
下一篇: 沒(méi)有了
初級(jí)會(huì)計(jì)職稱中級(jí)會(huì)計(jì)職稱經(jīng)濟(jì)師注冊(cè)會(huì)計(jì)師證券從業(yè)銀行從業(yè)會(huì)計(jì)實(shí)操統(tǒng)計(jì)師審計(jì)師高級(jí)會(huì)計(jì)師基金從業(yè)資格稅務(wù)師資產(chǎn)評(píng)估師國(guó)際內(nèi)審師ACCA/CAT價(jià)格鑒證師統(tǒng)計(jì)資格從業(yè)
一級(jí)建造師二級(jí)建造師消防工程師造價(jià)工程師土建職稱房地產(chǎn)經(jīng)紀(jì)人公路檢測(cè)工程師建筑八大員注冊(cè)建筑師二級(jí)造價(jià)師監(jiān)理工程師咨詢工程師房地產(chǎn)估價(jià)師 城鄉(xiāng)規(guī)劃師結(jié)構(gòu)工程師巖土工程師安全工程師設(shè)備監(jiān)理師環(huán)境影響評(píng)價(jià)土地登記代理公路造價(jià)師公路監(jiān)理師化工工程師暖通工程師給排水工程師計(jì)量工程師
人力資源考試教師資格考試出版專業(yè)資格健康管理師導(dǎo)游考試社會(huì)工作者司法考試職稱計(jì)算機(jī)營(yíng)養(yǎng)師心理咨詢師育嬰師事業(yè)單位教師招聘公務(wù)員公選考試招警考試選調(diào)生村官
執(zhí)業(yè)藥師執(zhí)業(yè)醫(yī)師衛(wèi)生資格考試衛(wèi)生高級(jí)職稱護(hù)士資格證初級(jí)護(hù)師主管護(hù)師住院醫(yī)師臨床執(zhí)業(yè)醫(yī)師臨床助理醫(yī)師中醫(yī)執(zhí)業(yè)醫(yī)師中醫(yī)助理醫(yī)師中西醫(yī)醫(yī)師中西醫(yī)助理口腔執(zhí)業(yè)醫(yī)師口腔助理醫(yī)師公共衛(wèi)生醫(yī)師公衛(wèi)助理醫(yī)師實(shí)踐技能內(nèi)科主治醫(yī)師外科主治醫(yī)師中醫(yī)內(nèi)科主治兒科主治醫(yī)師婦產(chǎn)科醫(yī)師西藥士/師中藥士/師臨床檢驗(yàn)技師臨床醫(yī)學(xué)理論中醫(yī)理論