【零基礎(chǔ) 快速學(xué)Java】韓順平 零基礎(chǔ)30天學(xué)會(huì)Java

跨類(lèi)調(diào)用方法:先創(chuàng)建對(duì)象 再用對(duì)象去調(diào)用方法(跨類(lèi)調(diào)用變量也一樣)?
引用類(lèi)型作為參數(shù)調(diào)用會(huì)改變數(shù)據(jù)本身(因?yàn)橐妙?lèi)型數(shù)據(jù)傳遞時(shí)傳遞的是地址---引用傳遞 指針)
方法重載(方法名必須相同,參數(shù)列表必須不同 返回類(lèi)型無(wú)要求)
可變參數(shù):
同一類(lèi)中的多個(gè)同名同功能但形參個(gè)數(shù)不同的方法封裝成一個(gè)方法使用可變參數(shù)時(shí)可以當(dāng)做數(shù)組來(lái)使用,形參視為數(shù)組,實(shí)參可以是0個(gè)或多個(gè),可變參數(shù)可以和普通參數(shù)一起放在形參列表但是必須保證可變參數(shù)在最后,一個(gè)形參列表最多一個(gè)可變參數(shù))
?public int sum(int...nums){return nums.length}
?構(gòu)造器(構(gòu)造方法):
完成對(duì)新對(duì)象的初始化,方法名和類(lèi)名相同,沒(méi)有返回值,創(chuàng)建對(duì)象時(shí)系統(tǒng)自動(dòng)調(diào)用構(gòu)造器完成對(duì)對(duì)象的初始化,構(gòu)造器可以重載(多次定義)
Person p1 = new Person("king", 40);
public Person(String pName, int pAge){
name = pName;
age = pAge;
}
當(dāng)你沒(méi)定義構(gòu)造器時(shí)系統(tǒng)會(huì)給你定義一個(gè)默認(rèn)無(wú)參構(gòu)造器,這也就是為什么我們定義對(duì)象時(shí)是這么定義的,Dog dog1 = new Dog();,而一旦自己定義了構(gòu)造器就會(huì)覆蓋默認(rèn)的構(gòu)造器,除非顯示定義一下Dog(){}--重要?
Dog(){
}
??
對(duì)象初始化:默認(rèn)初始化->顯式初始化->構(gòu)造器初始化
this本質(zhì)就是個(gè)指向該對(duì)象本身的指針,哪個(gè)對(duì)象調(diào)用,this就代表哪個(gè)對(duì)象,訪(fǎng)問(wèn)構(gòu)造器語(yǔ)法---this(參數(shù)列表)只能在構(gòu)造器中使用(即只能在構(gòu)造器中訪(fǎng)問(wèn)另一個(gè)構(gòu)造器,必須放在第一條語(yǔ)句),this不能在類(lèi)定義外用,只能在類(lèi)定義的方法中用?
this(形參列表)<-這個(gè)就是個(gè) 構(gòu)造器 會(huì)去調(diào)用相關(guān)的那個(gè)構(gòu)造器
?包 import
?package的作用是聲明當(dāng)前類(lèi)所在的包,需要放在類(lèi)(或文件)的最上面,其實(shí)包就是那個(gè)包含java文件的文件夾
?訪(fǎng)問(wèn)修飾符
? 本類(lèi) 同包 子類(lèi) 不同包??????
?public 1 1 1 1
?protected 1 1 1 0
?默認(rèn)(無(wú)修飾符) 1 1 0 0
?private 1 0 0 0??(私有的屬性要通過(guò)公共的方法在子類(lèi)中訪(fǎng)問(wèn);私有的方法只能在類(lèi)定義中訪(fǎng)問(wèn),子類(lèi)中不可見(jiàn))
?(只有默認(rèn)和public可以修飾類(lèi))?
?封裝:
?將屬性私有化private->提供一個(gè)公共的(public)set方法,用于對(duì)屬性判斷并且賦值->提供一個(gè)公共的(public)get方法,用于獲取屬性的值 (這兩個(gè)功能可以通過(guò)快捷鍵alt+insert來(lái)直接編寫(xiě)出來(lái),構(gòu)造器也可以通過(guò)alt+insert直接生成)
?將setName方法寫(xiě)入構(gòu)造器中則在使用構(gòu)造器初始化時(shí)仍然可以通過(guò)set函數(shù)來(lái)進(jìn)行判斷和賦值,例如,this.setName();
?繼承---extends 實(shí)現(xiàn)代碼復(fù)用
?class 子類(lèi) extends 父類(lèi){ //它這個(gè)extends的使用順序這樣記,是繼承吧,那就是子類(lèi)繼承(extends)了父類(lèi),子類(lèi) extends 父類(lèi)
?}
?子類(lèi)會(huì)擁有父類(lèi)定義的屬性和方法;父類(lèi)又叫超類(lèi),基類(lèi);子類(lèi)又叫派生類(lèi)
?子類(lèi)必須調(diào)用父類(lèi)的構(gòu)造器完成對(duì)父類(lèi)的初始化,如果沒(méi)有寫(xiě)系統(tǒng)則默認(rèn)使用了super()調(diào)用了父類(lèi)的無(wú)參構(gòu)造器
?當(dāng)創(chuàng)建子類(lèi)對(duì)象時(shí),不管使用子類(lèi)的哪個(gè)構(gòu)造器,默認(rèn)情況下總會(huì)調(diào)用父類(lèi)的無(wú)參構(gòu)造器,如果父類(lèi)沒(méi)有提供無(wú)參構(gòu)造器,則必須在子類(lèi)的每一個(gè)構(gòu)造器中用super去指定使用父類(lèi)的哪個(gè)構(gòu)造器完成對(duì)父類(lèi)的初始化工作,否則,編譯不通過(guò)
?super在使用時(shí)必須放在構(gòu)造器的第一行,super()和this()不能同時(shí)使用,因?yàn)槎家旁跇?gòu)造器的第一行
?Object是所用類(lèi)的基類(lèi),所謂的繼承就是通過(guò)地址查找,一層一層向上去查找,直到找到Object基類(lèi)?
?super:可以訪(fǎng)問(wèn)父類(lèi)的屬性,方法,構(gòu)造器;super這幾個(gè)字母其實(shí)就相當(dāng)于父類(lèi)名那幾個(gè)字母,this那幾個(gè)字母其實(shí)就相當(dāng)于本類(lèi)名那幾個(gè)字母,所以當(dāng)子類(lèi)中有和父類(lèi)中的成員(屬性和方法)重名時(shí),為了訪(fǎng)向父類(lèi)的成員,必須通過(guò) super。如果沒(méi)有重名,使用 直接訪(fǎng)向,super、this,是一樣的效果
?super其實(shí)不僅僅局限于父類(lèi)(爺爺類(lèi)也行)但當(dāng)繼承關(guān)系中存在多個(gè)同名屬性或方法時(shí),super遵循就近原則
?this和super ??this super
?訪(fǎng)問(wèn)屬性 訪(fǎng)問(wèn)本類(lèi)中的屬性,如果本類(lèi)沒(méi)有此屬性則從父類(lèi)中繼續(xù)查找 從父類(lèi)開(kāi)始查找屬性
?調(diào)用方法 訪(fǎng)問(wèn)本類(lèi)中的方法,如果本類(lèi)沒(méi)有此方法則從父類(lèi)繼續(xù)查找 從父類(lèi)開(kāi)始查找方法
?
?調(diào)用構(gòu)造器 調(diào)用本類(lèi)構(gòu)造器,必須放在構(gòu)造器的首行 調(diào)用父類(lèi)構(gòu)造器,必須放在子類(lèi)構(gòu)造器的首行
?特殊性 ??? 表示當(dāng)前對(duì)象 子類(lèi)中訪(fǎng)問(wèn)父(爺)類(lèi)對(duì)象
?方法重寫(xiě)(方法覆蓋):子類(lèi)的方法的參數(shù),方法名稱(chēng)要和父類(lèi)方法的參數(shù)方法名稱(chēng)完全一樣。子類(lèi)方法的返回類(lèi)型和父類(lèi)方法返回類(lèi)型一樣,或者是父類(lèi)返回類(lèi)型的子類(lèi),比如父類(lèi)返回類(lèi)型是 Object,子類(lèi)方法返回類(lèi)型是 String,子類(lèi)方法不能縮小父類(lèi)方法的訪(fǎng)問(wèn)權(quán)限
? 發(fā)生范圍 方法名 形參列表 返回類(lèi)型無(wú)要求 修飾符
?
?方法重載(overload) 本類(lèi)中 必須相同 個(gè)數(shù)或順序必須有不同 無(wú)要求 無(wú)要求
?
?方法重寫(xiě)(override) 父類(lèi)與子類(lèi) 必須相同 必須相同 和父類(lèi)相同或被其包含 子類(lèi)方法不能縮小父類(lèi)方法的訪(fǎng)問(wèn)范圍
?多態(tài)---提高代碼復(fù)用性
?方法多態(tài)---例如方法重寫(xiě)和重載
?對(duì)象多態(tài)->(1)一個(gè)對(duì)象的編譯類(lèi)型和運(yùn)行類(lèi)型可以不一致(2)編譯類(lèi)型在定義對(duì)象時(shí),就確定了,不能改(3)運(yùn)行類(lèi)型是可以變化的(4)編譯類(lèi)型看定義時(shí) = 號(hào)的左邊,運(yùn)行類(lèi)型看 = 號(hào)的右邊,執(zhí)行時(shí)是看你的運(yùn)行類(lèi)型而非編譯類(lèi)型
?多態(tài)的前提:兩個(gè)對(duì)象(類(lèi))存在繼承關(guān)系
?多態(tài)的向上轉(zhuǎn)型->本質(zhì):父類(lèi)的引用指向了子類(lèi)的對(duì)象;->語(yǔ)法: 父類(lèi)類(lèi)型 引用名 = new 子類(lèi)對(duì)象();->特點(diǎn):編譯類(lèi)型(編譯時(shí))看左邊,運(yùn)行類(lèi)型(運(yùn)行時(shí))看右邊,(1)可以調(diào)用父類(lèi)中的所有成員(需要遵守訪(fǎng)問(wèn)權(quán)限)(2)不能調(diào)用子類(lèi)中的特有成員(即子類(lèi)中有而父類(lèi)中沒(méi)有的),這是因?yàn)樵诰幾g階段時(shí),能調(diào)用哪些成員是由編譯類(lèi)型來(lái)決定的,而最終運(yùn)行時(shí)看的是子類(lèi)(運(yùn)行類(lèi)型)的具體實(shí)現(xiàn),且調(diào)用方法時(shí),按照從子類(lèi)(運(yùn)行類(lèi)型)開(kāi)始查找方法,然后調(diào)用
?Animal animal = new Cat();
?向下轉(zhuǎn)型是為了解決向上轉(zhuǎn)型后不能調(diào)用子類(lèi)特有對(duì)象的問(wèn)題即上上行的(2)
?多態(tài)的向下轉(zhuǎn)型->(1)語(yǔ)法:子類(lèi)類(lèi)型 引用名 = (子類(lèi)類(lèi)型)父類(lèi)引用;(2)只能強(qiáng)轉(zhuǎn)父類(lèi)的引用,不能強(qiáng)轉(zhuǎn)父類(lèi)的對(duì)象;(3)要求父類(lèi)的引用必須指向的是當(dāng)前目標(biāo)類(lèi)型的對(duì)象;(4)當(dāng)向下轉(zhuǎn)型后,可以調(diào)用子類(lèi)類(lèi)型中所有的成員
?Cat cat = (Cat)animal;此時(shí)cat的編譯類(lèi)型和運(yùn)行類(lèi)型都是Cat
?屬性沒(méi)有重寫(xiě),屬性的值看編譯類(lèi)型
?instanceof 比較操作符,用于判斷對(duì)象的運(yùn)行類(lèi)型是否為xx類(lèi)型或者xx類(lèi)型的子類(lèi)型