@[toc]
創(chuàng)新互聯(lián)主營(yíng)豐潤(rùn)網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app開(kāi)發(fā)定制,豐潤(rùn)h5小程序開(kāi)發(fā)搭建,豐潤(rùn)網(wǎng)站營(yíng)銷推廣歡迎豐潤(rùn)等地區(qū)企業(yè)咨詢
全局只有一個(gè)實(shí)例
font color=#03a3e3 該實(shí)現(xiàn)方式在多線程場(chǎng)景下不安全
繼承其他類的類稱為派生類(derived class)
被其他類繼承的類稱為這些類的基類(base
class)
需要注意圓括號(hào)中基類的順序:font color=#03a3e3 從左到右搜索 font
多繼承會(huì)導(dǎo)致菱形 diamond關(guān)系:有至少一個(gè)基類可以從子類經(jīng)由多個(gè)繼承路徑到達(dá)
基類方法可能被多次調(diào)用
防止重復(fù)訪問(wèn),每個(gè)基類只調(diào)用一次
通過(guò)子類實(shí)例對(duì)象課調(diào)用父類已被覆蓋
慎用多繼承(二義性)
– 對(duì)已有的運(yùn)算符重新進(jìn)行定義,賦予其另一種功能,以適應(yīng)不同的數(shù)據(jù)類型
– 運(yùn)算符重載不能改變其本來(lái)寓意
– 運(yùn)算符重載只是一種 “語(yǔ)法上的方便” (sugar)
– 是一種函數(shù)調(diào)用的方式
python里面沒(méi)有重載吧?
正常的重載說(shuō)的應(yīng)該是函數(shù)方法的重載,即兩個(gè)函數(shù)的名稱相同但是參數(shù)不同是重載,會(huì)出現(xiàn)重載的情況一般是函數(shù)實(shí)現(xiàn)相同功能時(shí),遇到參數(shù)類型可能不同的情況,會(huì)出現(xiàn)重載,如比較常見(jiàn)的對(duì)于加法的實(shí)現(xiàn),如果輸入兩個(gè)整數(shù)相加則直接使用整數(shù)加法,如果兩個(gè)字符串相加則使用字符串的拼接。輸入的參數(shù)類型不同,其實(shí)是兩個(gè)不同的函數(shù),這在那種強(qiáng)類型語(yǔ)言中是可以利用函數(shù)重載來(lái)實(shí)現(xiàn)的,而python中函數(shù)類型是動(dòng)態(tài)的各種各樣的,所以不需要重載這個(gè)機(jī)制。相同函數(shù)名就是表示同一個(gè)方法。
沒(méi)有重載,但是可以有默認(rèn)參數(shù)和不定長(zhǎng)參數(shù),可以判斷默認(rèn)值和參數(shù)長(zhǎng)度來(lái)處理。
比如:
def range(start, end = -1):
if end == -1:
end = start
start = 0
或
def range(*args):
if len(args) == 1:
start = 0
end = args[0]
elif len(args) == 2:
start, end = args[0], args[1]
重載和重寫,這是兩個(gè)新概念,是兩個(gè)令我們?nèi)菀谆煜母拍?。方法重載(overloadingmethod)是在一個(gè)類里面,方法名字相同,而參數(shù)不同。返回類型呢?可以相同也可以不同。方法重寫(overidingmethod)子類不想原封不動(dòng)地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫。方法重寫又稱方法覆蓋。方法重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段。Java的方法重載,就是在類中可以創(chuàng)建多個(gè)方法,它們具有相同的名字,但具有不同的參數(shù)和不同的定義。調(diào)用方法時(shí)通過(guò)傳遞給它們的不同個(gè)數(shù)和類型的參數(shù)來(lái)決定具體使用哪個(gè)方法,這就是多態(tài)性。方法重寫:在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時(shí)子類并不想原封不動(dòng)地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫。方法重寫又稱方法覆蓋。若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數(shù)表,則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關(guān)鍵字,該關(guān)鍵字引用了當(dāng)前類的父類重寫方法的規(guī)則:參數(shù)列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是重載.返回的類型必須一直與被重寫的方法的返回類型相同,否則不能稱其為重寫而是重載.訪問(wèn)修飾符的限制一定要大于被重寫方法的訪問(wèn)修飾符(publicprotecteddefaultprivate)重寫方法一定不能拋出新的檢查異?;蛘弑缺恢貙懛椒ㄉ昝鞲訉挿旱臋z查型異常.例如,父類的一個(gè)方法申明了一個(gè)檢查異常IOException,在重寫這個(gè)方法是就不能拋出Exception,只能拋出IOException的子類異常,可以拋出非檢查異常.重載的規(guī)則:必須具有不同的參數(shù)列表;可以有不同的返回類型,只要參數(shù)列表不同就可以了;可以有不同的訪問(wèn)修飾符;可以拋出不同的異常;注意,Java的方法重載要求同名的方法必須有不同的參數(shù)表,僅有返回類型不同是不足以區(qū)分兩個(gè)重載的方法。重寫方法只能存在于具有繼承關(guān)系中,重寫方法只能重寫父類非私有的方法。下面分別舉一個(gè)例子來(lái)說(shuō)明方法重載:publicclassTestOverLoad{publicstaticvoidmain(String[]args){Testtest=newTest();test.print(null);}}classTest{publicvoidprint(Stringsome){System.out.println("Stringversionprint");}publicvoidprint(Objectsome){System.out.println("Objectversionprint");}}該程序輸出的結(jié)果是Stringversionprint。