這篇文章主要介紹“java多態(tài)的特性詳解”,在日常操作中,相信很多人在java多態(tài)的特性詳解問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”java多態(tài)的特性詳解”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
為北湖等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及北湖網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、北湖網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
什么是多態(tài)
多態(tài)就是一個(gè)對(duì)象具有多種形態(tài),就是父類的引用類型變量指向子類的對(duì)象或者接口的引用類型變量指向接口實(shí)現(xiàn)類的對(duì)象,使用前提的必須存在繼承和實(shí)現(xiàn)關(guān)系,簡(jiǎn)單來說就是,一個(gè)引用變量到底指向哪個(gè)類的實(shí)例對(duì)象和這個(gè)引用變量所調(diào)用的方法到底是哪個(gè)類的,必須在程序運(yùn)行期間才能決定。這樣不需要修改源代碼就可以改變程序運(yùn)行時(shí)所綁定的代碼,讓程序具有多個(gè)運(yùn)行狀態(tài),這就是多態(tài)性。
多態(tài)注意條件
要實(shí)現(xiàn)多態(tài),需要注意如下前提條件:
a. 需要有繼承關(guān)系;
b. 子類需要重寫父類的方法;
c. 需要將子類的對(duì)象賦值給父類的引用
成員訪問特點(diǎn)
成員變量:編譯看父類,運(yùn)行看父類
成員方法:編譯看父類,運(yùn)行看子類
靜態(tài)方法:編譯看父類,運(yùn)行看父類
多態(tài)(靜態(tài)綁定,動(dòng)態(tài)綁定)
1. 靜態(tài)綁定:即方法名相同,方法簽名不相同。實(shí)參和哪個(gè)方法形參最大限度匹配就調(diào)用哪個(gè)重載方法,如 int 型實(shí)參找不到對(duì)應(yīng)的 int 型形參重載方法時(shí)就會(huì)尋找 double 型形參的方法,如果實(shí)參是對(duì)象的引用,會(huì)先找形參為自身類類型的,找不到的話就找形參為父類類型引用的重載方法。重載是在編譯期間就確定好要調(diào)用哪個(gè)方法了,不會(huì)因?yàn)橐盟赶虻木唧w對(duì)象不同而不同。如下代碼所示:
public class A{
void fun(String str);
void fun(int number);
}
2.動(dòng)態(tài)綁定:即父類與子類有同樣的方法名。父類引用指向子類對(duì)象,調(diào)用某個(gè)被覆蓋的方法,在程序運(yùn)行之前,并不知道調(diào)用哪個(gè)方法,只有當(dāng)運(yùn)行時(shí)才知道,因?yàn)檫\(yùn)行時(shí)該父類引用所具體指向的對(duì)象的同名方法會(huì)被調(diào)用,這個(gè)在編譯時(shí)是不確定的,因?yàn)榫幾g之所以通過只不過是因?yàn)榫幾g時(shí),編譯器只會(huì)去該父類引用所代表的父類中去尋找該方法名,如果找到了,并且有權(quán)限調(diào)用就編譯通過。如下代碼所示:
public class A{
void fun() {
System.out.println("I'am class A.fun()");
}
}
public class B extends A{
@Override
void fun() {
System.out.println("I'am class B.fun()");
}
}
多態(tài)優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
1)可替換性(substitutability):多態(tài)對(duì)已存在代碼具有可替換性;
2)可擴(kuò)充性(extensibility):多態(tài)對(duì)代碼具有可擴(kuò)充性。增加新的子類不影響已存在類的多態(tài)性、繼承性,以及其他特性的運(yùn)行和操作。實(shí)際上新加子類更容易獲得多態(tài)功能;
3)接口性(interface-ability):多態(tài)是超類通過方法簽名,向子類提供了一個(gè)共同接口,由子類來完善或者覆蓋它而實(shí)現(xiàn)的;
4)靈活性(flexibility):它在應(yīng)用中體現(xiàn)了靈活多樣的操作,提高了使用效率;
5)簡(jiǎn)化性(simplicity):多態(tài)簡(jiǎn)化對(duì)應(yīng)用軟件的代碼編寫和修改過程,尤其在處理大量對(duì)象的運(yùn)算和操作時(shí),這個(gè)特點(diǎn)尤為突出和重要;
缺點(diǎn):
1) 不能使用子類的特有屬性和行為
總結(jié)
到此,關(guān)于“java多態(tài)的特性詳解”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!