第三階段考核總結(jié)

抽象類與接口的的區(qū)別

抽象類:用關(guān)鍵字abstract修飾,存在抽象方法的類一定是抽象類,但抽象類不一定有抽象方法,抽象類可以存在成員變量,也可以存在構(gòu)造器用于對(duì)屬性的初始化,但是抽象類不能被實(shí)例化,繼承抽象類的子類可以將父類的所有抽象方法實(shí)現(xiàn),也可以選擇性的實(shí)現(xiàn)而將子類繼續(xù)設(shè)定為抽象方法,

接口:用關(guān)鍵字interface聲明,接口中只存在抽象方法,并且存在的屬性全部為public static final類型,且不存在構(gòu)造器,一個(gè)子類可以實(shí)現(xiàn)多個(gè)接口,用implements關(guān)鍵字實(shí)現(xiàn)接口,要將接口中的全部方法實(shí)現(xiàn),接口也可以存在繼承關(guān)系,子類要將實(shí)現(xiàn)的接口的全部方法實(shí)現(xiàn),包括該接口的父類接口中的方法


為什么要有g(shù)et,set方法

set和get方法是面向?qū)ο缶幊讨谐S玫姆N封裝方式,用于對(duì)類的屬性進(jìn)行訪問和修改。它們的用如下:

1.封裝數(shù)據(jù):set方法用于設(shè)置屬性的值,get方法用于獲取屬性的值。通過使用set和get方法,可以將屬性的訪問限制在類的內(nèi)部,避免直接對(duì)屬性進(jìn)行操作,提高了代碼的安全性和可維護(hù)性。

2.控制訪問權(quán)限:set和get方法可以對(duì)屬性的訪問進(jìn)行控制。例如,可以在set方法中添加一些條件判斷,對(duì)傳入的值進(jìn)行驗(yàn)證和處理,確保屬性值的有效性。同時(shí),get方法可以對(duì)屬性的返回值進(jìn)行處理,例如格式化輸出或者進(jìn)行計(jì)算。

3.實(shí)現(xiàn)數(shù)據(jù)封裝:通過使用set和get方法,可以將屬性的實(shí)現(xiàn)細(xì)節(jié)隱藏起來,只暴露必要的接口給外部使用。這樣可以提高代碼的封裝性,減少對(duì)屬性的直接訪問,降低了類與類之間的耦合度。

4.可以添加額外邏輯:在set和get方法中,可以添加一些額外的邏輯操作。例如,在set方法中可以觸發(fā)事件或者通知其他對(duì)象,實(shí)現(xiàn)更復(fù)雜的業(yè)務(wù)邏輯。

總結(jié),set和get方法提供了一種良好的封裝方式,使得類的屬性訪問更加安全、可控,并且提供了更好的代碼封裝性和可維護(hù)性。


向上轉(zhuǎn)型與向下轉(zhuǎn)型

1.向上轉(zhuǎn)型:

父類 : class Fruit {}

子類 : class Apple extends Fruit{}

創(chuàng)建向上轉(zhuǎn)型對(duì)象 fruit ;

Fruit fruit = new Apple();

Apple 向上轉(zhuǎn)型為父類

如果 Apple 中有重寫父類方法,fruit 對(duì)象默認(rèn)調(diào)用子類中重寫方法

注意 :

fruit 可以直接訪問子類重寫方法。

fruit 不能直接訪問子類私有方法、子類所有屬性。

fruit 可以通過重寫方法調(diào)用子類私有方法和屬性

fruit 重寫方法中調(diào)用方法和屬性順序 : 子類 -> 父類

其他 : 關(guān)于重寫的返回值類:如果方法的返回類型是 void和基本數(shù)據(jù)類型,則返回值重寫時(shí)不可修改。但是如果方法的返回值是引用類型,重寫時(shí)是可以返回該引用類型的子類的。

2.向下轉(zhuǎn)型

注意 : 只有向上轉(zhuǎn)型過的對(duì)象才能向下轉(zhuǎn)型

向下轉(zhuǎn)型為恢復(fù)子類所有功能。

Apple apple = (Apple) fruit;


有參構(gòu)造與無參構(gòu)造的存在情況

有參構(gòu)造函數(shù)和無參構(gòu)造函數(shù)是面向?qū)ο缶幊讨谐S玫膬煞N構(gòu)造函數(shù)形式。

無參構(gòu)造函數(shù):指沒有參數(shù)的構(gòu)造函數(shù),也稱為默認(rèn)構(gòu)造函數(shù)。它在創(chuàng)建對(duì)象時(shí)不需要傳入任何參數(shù),可以直接使用默認(rèn)的屬性值進(jìn)行對(duì)象的初始化。無參構(gòu)造函數(shù)通常用于創(chuàng)建對(duì)象時(shí)不需要額外信息的情況。

有參構(gòu)造函數(shù):指帶有參數(shù)的構(gòu)造函數(shù)。它在創(chuàng)建對(duì)象時(shí)需要傳入相應(yīng)的參數(shù),用于初始化對(duì)象的屬性值。有參構(gòu)造函數(shù)可以根據(jù)傳入的參數(shù)不同,靈活地初始化對(duì)象的屬性。有參構(gòu)造函數(shù)通常用于創(chuàng)建對(duì)象時(shí)需要額外信息的情況。

有參構(gòu)造函數(shù)和無參構(gòu)造函數(shù)可以同時(shí)存在于一個(gè)類中,也可以只存在其中一種。如果一個(gè)類中沒有定義任何構(gòu)造函數(shù),編譯器會(huì)自動(dòng)生成一個(gè)默認(rèn)的無參構(gòu)造函數(shù)。如果在類中定義了有參構(gòu)造函數(shù),但沒有定義無參構(gòu)造函數(shù),那么在創(chuàng)建對(duì)象時(shí)必須顯式地傳入?yún)?shù),否則會(huì)編譯

錯(cuò)誤。

總結(jié):

無參構(gòu)造函數(shù):不需要傳入?yún)?shù),使用默認(rèn)的屬性值進(jìn)行對(duì)象初始化。

有參構(gòu)造函數(shù):需要傳入?yún)?shù),根據(jù)參數(shù)的不同進(jìn)行對(duì)象初始化。

在平時(shí)寫代碼的過程中,要么無參構(gòu)造和有參構(gòu)造都寫,要么都不寫。


方法的重寫與重載

方法的重寫是子類重新定義父類中已經(jīng)存在的方法,方法名稱、參數(shù)列表和返回類型必須相同,實(shí)現(xiàn)多態(tài)。

方法的重載是在同一個(gè)類中定義多個(gè)具有相同名稱但參數(shù)列表不同的方法,根據(jù)參數(shù)類型和數(shù)量確定調(diào)用哪個(gè)方法。


重寫與重載的區(qū)別:

1.方法重載是發(fā)生在同一個(gè)類中,而方法重寫是發(fā)生在子類和父類之間;

2.方法重載要求:方法名相同、但參數(shù)類型或參數(shù)個(gè)數(shù)不同;方法重寫:方法名、返回值類型和參數(shù)列表都相同

3.方法重載是用于相同的方法名稱不同的問題;方法重寫是因?yàn)楦割惖哪硞€(gè)方法不滿足子類的要求,所以對(duì)該方法進(jìn)行重寫


比較字符串用==還是equal

”==”是用來比較字符串的引用地址,而equals()才是比較字符串的值。兩個(gè)值相同的字符串用”==”比較結(jié)果有可能是false,而用equals()則一定為true。除非兩個(gè)字符串是同一個(gè)new出來的對(duì)象,不然比較字符串值是否相同應(yīng)該要用equals()。

==是運(yùn)算符,equal是方法

總結(jié):

1.java基本類型(short,int,long,byte,char,float,double,boolean)

比較基本類型,只能用==,不能用equal,這里的==比較的是兩個(gè)變量的值

2.比較包裝類型

==比較的是內(nèi)存地址,因?yàn)閍和b是new出來的,是兩個(gè)不同的對(duì)象,所以地址肯定是不同的,而equal比較的是值

3.比較String類型

==比較的是內(nèi)存地址,equal比較的是值

4.比較對(duì)象

==和equal比較的都是內(nèi)存地址,因?yàn)閑qual沒有被重寫,沒有被重寫的equal都是object的equal方法


創(chuàng)建字符串的2種方式的區(qū)別

1.采用直接賦值的方式賦值

eg:? String str1 = "abc";

采用這種方法去創(chuàng)建字符串時(shí),JVM會(huì)在方法區(qū)的字符串常量池中尋找這個(gè)字符串是否存在,如果存在則不去創(chuàng)建,讓創(chuàng)建的對(duì)象直接引用其在字符串常量池中的地址;如果不存在則在字符串常量池中創(chuàng)建這個(gè)字符串并且返回這個(gè)字符串在常量池中的地址。

2.采用new關(guān)鍵字新建一個(gè)字符串對(duì)象

eg:? String str2 = new String("abc");

采用new關(guān)鍵字新建一個(gè)字符串對(duì)象時(shí),JVM首先在字符串池中查找有沒有"abc"這個(gè)字符串如果有,則不在池中再去創(chuàng)建"abc"這個(gè)對(duì)象了,直接在堆中創(chuàng)建一個(gè)"abc"字符串對(duì)象,然后將堆中的這個(gè)"abc"對(duì)象的地址返回賦給引用str,這樣,str就指向了堆中創(chuàng)建的這個(gè)"abc"字符串對(duì)象;如果沒有,則首先在字符串池中創(chuàng)建一個(gè)"abc"字符串對(duì)象,然后再在堆中創(chuàng)建一個(gè)"abc"字符串對(duì)象,然后將堆中這個(gè)"abc"字符串對(duì)象的地址返回賦給str引用,這樣,str指向了堆中創(chuàng)建的這個(gè)"abc"字符串對(duì)象。

注意:這種方法本質(zhì)是在堆區(qū)引用字符串常量池中的地址,每次new的對(duì)象,在堆上都會(huì)創(chuàng)建一個(gè)新的對(duì)象指向常量池。

?這兩種方法創(chuàng)建出的字符串雖然內(nèi)容是一樣的,但指向是不一樣的。str1和str3直接指向的是常量池的地址,str2指向堆的地址。

總結(jié):new創(chuàng)建出的對(duì)象指向均不相等,字符串的創(chuàng)建無論是哪種方式,都需要先在字符串常量池中尋找該字符串是否存在。


數(shù)組的動(dòng)態(tài)初始化與靜態(tài)初始化

數(shù)組的初始化:數(shù)組元素類型[] 數(shù)組名=new 數(shù)組元素類型[]{元素1,元素2.....} ;

數(shù)組的初始化:?數(shù)組元素類型[] 數(shù)組名={元素1,元素2.....} ;


foreach

使用?for each?循環(huán)來遍歷數(shù)組或集合中的元素。for each?循環(huán)也被稱為增強(qiáng)型?for?循環(huán)。

?for each?循環(huán)的基本語法:

for (元素類型 變量名 : 數(shù)組或集合) {

? ? // 執(zhí)行循環(huán)體操作

}

for each遍歷二維數(shù)組:

for(元素類型 [ ] 過渡一維數(shù)組名 : 二維數(shù)組名){

????for(元素類型 變量名 :?過渡一維數(shù)組名){

? ? ? ? ? ? ? // 執(zhí)行循環(huán)體操作

????}

}


Arrylist是否有序

ArrayList:(有序、可重復(fù)的)

創(chuàng)建集合:ArrayList 集合名=new ArrayList();

獲取元素:get(int index)

替換元素:set(int index,Object element)

添加元素:add(添加一個(gè)元素)? ? ? addAll(將指定集合中的所有元素都添加到當(dāng)前集合中)

刪除元素:remove(刪除集合中的指點(diǎn)元素)? ? ? ? removeAll(刪除指定集合中的所有元素)

將集合元素順序翻轉(zhuǎn):reverse(List list)

將集合元素按自然順序排列:sort(List list)

判斷是否包含元素:contains(判斷集合中是否包含某個(gè)元素)? ? ? containsAll(判斷集合中是否包含指定集合中所有元素)

HashSet:(無序、不可重復(fù))

key value重復(fù)問題


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容