JAVA面向?qū)ο蠡A(chǔ)知識(shí)梳理

什么是面向?qū)ο?/h3>

面向?qū)ο?Object Oriented Programming 簡(jiǎn)稱(chēng):OOP;

在程序中使用對(duì)象來(lái)映射現(xiàn)實(shí)中的事物,適用對(duì)象的關(guān)系來(lái)描述事物之間的聯(lián)系,這種思想就是面向?qū)ο螅?/p>

面向?qū)ο笈c面向過(guò)程的區(qū)別

面向過(guò)程就是分析解決問(wèn)題所需要的步驟,然后用函數(shù)把這些步驟一一實(shí)現(xiàn),使用的時(shí)候依次調(diào)用就可以了。

面向?qū)ο髣t是把解決的問(wèn)題按照一定規(guī)則劃分為多個(gè)獨(dú)立的對(duì)象,然后通過(guò)對(duì)象的方法來(lái)解決問(wèn)題。一個(gè)應(yīng)用程序會(huì)包含多個(gè)對(duì)象,通過(guò)多個(gè)對(duì)象的相互配合來(lái)實(shí)現(xiàn)應(yīng)用程序的功能。當(dāng)某個(gè)應(yīng)用程序功能需要改變時(shí),只需要修改個(gè)別的對(duì)象即可,這樣可以使代碼更容易維護(hù),效率更高。

例如:洗衣服,之前小鯨魚(yú)是將衣服放到盆里面,然后倒入適量洗衣粉,在加入適量水,然后這時(shí)候小鯨魚(yú)就開(kāi)始了純手工搓洗階段,有了面向?qū)ο笾?,小鯨魚(yú)就像是擁有了一臺(tái)洗衣機(jī),就只需要將衣服放進(jìn)洗衣桶,然后倒入洗衣粉,按下開(kāi)始按鈕,此時(shí),小鯨魚(yú)就只需要等待它洗好就行,所以很大程度上提高了效率

面向?qū)ο蟮娜筇匦?/h3>

封裝性

????????封裝性是面向?qū)ο蟮暮诵乃枷耄瑢?duì)象的屬性和方法封裝起來(lái),不需要讓外界知道具體實(shí)現(xiàn)的細(xì)節(jié),這就是封裝的思想。

????????封裝可以是數(shù)據(jù)的安全得到保證。當(dāng)把過(guò)程和數(shù)據(jù)封裝起來(lái)后,對(duì)數(shù)據(jù)的訪(fǎng)問(wèn)只能通過(guò)已定義的接口進(jìn)行

繼承性

? ? ? ? 繼承主要指的是類(lèi)與類(lèi)之前的關(guān)系。通過(guò)繼承,可以有效的對(duì)原有類(lèi)的功能進(jìn)行擴(kuò)展。

????????繼承不僅增強(qiáng)了代碼的復(fù)用性,提高了開(kāi)發(fā)效率 ,更為程序的修改補(bǔ)充提供了便利

????????注意:繼承要是用extends關(guān)鍵字,并且java中只允許單繼承,即一個(gè)類(lèi)只能有一個(gè)父類(lèi)。這樣的繼承關(guān)系呈樹(shù)狀,體現(xiàn)了java的簡(jiǎn)單性,子類(lèi)只能繼承在父類(lèi)中可以訪(fǎng)問(wèn)的屬性和方法,實(shí)際上父類(lèi)中私有的屬性和方法也會(huì)被子類(lèi)繼承,只是子類(lèi)無(wú)法訪(fǎng)問(wèn)

多態(tài)性

? ? ? ? 多態(tài)是把子類(lèi)型的對(duì)象主觀(guān)的看作其父類(lèi)型的對(duì)象,那么父類(lèi)型就可以是很多種類(lèi)型。

????????多態(tài)有以下特性:

? ? ? ? ????????對(duì)象的實(shí)例確定后則不可改變(客觀(guān)不可改變);

? ? ? ? ? ? ? ? 只能定義編譯時(shí)類(lèi)型所定義的方法;

? ? ? ? ? ? ? ? 運(yùn)行時(shí)會(huì)根據(jù)運(yùn)行時(shí)類(lèi)型去調(diào)用相應(yīng)類(lèi)型中定義的方法;

構(gòu)造方法主要特點(diǎn)

構(gòu)造方法的名稱(chēng)必須與類(lèi)的名稱(chēng)完全相同

構(gòu)造方法不返回任何數(shù)據(jù),也不需要使用void關(guān)鍵字聲明

構(gòu)造方法的作用是創(chuàng)建對(duì)象并初始化成員變量

在創(chuàng)建對(duì)象時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用類(lèi)的構(gòu)造方法

構(gòu)造方法一般用public關(guān)鍵字聲明

每個(gè)類(lèi)至少有一個(gè)構(gòu)造方法。如果不定義構(gòu)造方法,java將提供一個(gè)默認(rèn)的不帶參數(shù)且方法為空的構(gòu)造方法

構(gòu)造方法也可以重載

訪(fǎng)問(wèn)修飾符的作用范圍

訪(fǎng)問(wèn)修飾符作用范圍

私有的訪(fǎng)問(wèn)修飾符private

? ? ? ? private修飾符對(duì)應(yīng)最嚴(yán)格的訪(fǎng)問(wèn)級(jí)別,被聲明為private的方法、變量和構(gòu)造方法只能被所屬類(lèi)訪(fǎng)問(wèn)。

無(wú)訪(fǎng)問(wèn)修飾符

? ? ? ? 不使用訪(fǎng)問(wèn)修飾符聲明的變量和方法,可以被這個(gè)類(lèi)本身或者與類(lèi)在同一個(gè)包內(nèi)的其他類(lèi)訪(fǎng)問(wèn)

受保護(hù)的訪(fǎng)問(wèn)修飾符protected

? ? ? ? protected修飾符不能修飾類(lèi)和接口,方法和成員變量能夠聲明為protected,但是接口的成員變量個(gè)成員方法不能聲明為protected。

共有的訪(fǎng)問(wèn)修飾符public

? ? ? ? 被聲明為public的類(lèi)、方法、構(gòu)造方法和接口能夠被任何其他類(lèi)訪(fǎng)問(wèn)。

非訪(fǎng)問(wèn)修飾符

1.static修飾符

? ? ? ? static修飾符用來(lái)修飾類(lèi)和成員變量和成員方法,也可以形成靜態(tài)代碼塊。static修飾的成員變量和成員方法一般稱(chēng)為靜態(tài)變量和靜態(tài)方法,可以直接通過(guò)類(lèi)名訪(fǎng)問(wèn)它們

2.final修飾符

????????final可以修飾類(lèi)、方法和變量,意義不同,但是本質(zhì)相同,都是表示不可改變;

? ? ? ? 使用final方法的原因有兩個(gè):

? ? ? ? ? ? ? ? 一是把方法鎖定,防止任何繼承類(lèi)修改它的意義和實(shí)現(xiàn);

? ? ? ? ? ? ? ? 二是高效(編譯器在遇到調(diào)用final方法時(shí),會(huì)轉(zhuǎn)入內(nèi)嵌機(jī)制,大大提高執(zhí)行效率);

3.abstract修飾符

????????abstract用來(lái)修飾類(lèi),這個(gè)類(lèi)成為抽象類(lèi)。抽象類(lèi)不能用來(lái)實(shí)例化對(duì)象,聲明抽象類(lèi)的唯一目的是為了將來(lái)對(duì)該類(lèi)進(jìn)行擴(kuò)充。

????????抽象類(lèi)可以包含抽象方法和非抽象方法。

????????抽象方法不能被聲明陳final和static。

4.synchronized修飾符

? ? ? ? synchronized聲明的方法同一時(shí)間只能被一個(gè)線(xiàn)程訪(fǎng)問(wèn)。

? ? ? ? synchronized的作用范圍有如下兩種:

? ? ? ? ? ? 1)在某個(gè)對(duì)象內(nèi),synchronized修飾的方法可以防止多個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn)。

? ? ? ? ? ? ?2)在某個(gè)類(lèi)中,用synchronized修飾靜態(tài)方法可以防止多個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn)這個(gè)靜態(tài)方法。

5.transient修飾符

? ? ? ? 序列化對(duì)象包含被transient修飾的成員變量時(shí),JVM跳過(guò)該特定的變量。該修飾符包含在定義變量的語(yǔ)句中,用來(lái)預(yù)處理類(lèi)和變量的數(shù)據(jù)類(lèi)型。

6.volatile修飾符

? ? ? ? java語(yǔ)言是支持多線(xiàn)程的,為了解決線(xiàn)程并發(fā)的問(wèn)題,在語(yǔ)言?xún)?nèi)部引入了同步塊和volatile關(guān)鍵字機(jī)制。volatile修飾的成員變量在每次被線(xiàn)程訪(fǎng)問(wèn)時(shí)都強(qiáng)制從共享內(nèi)存中重新讀取該成員變量的值。而且,當(dāng)成員變量發(fā)生變化時(shí),會(huì)強(qiáng)制線(xiàn)程將變化值會(huì)寫(xiě)到共享內(nèi)存。這樣在任何時(shí)刻,兩個(gè)不同的線(xiàn)程總是看到某個(gè)成員變量的同一個(gè)值。(一個(gè)volatile對(duì)象引用可能是null)


接口與抽象類(lèi)的不同點(diǎn)

1.接口支持多繼承,抽象類(lèi)不能實(shí)現(xiàn)多繼承

2.一個(gè)類(lèi)只能繼承一個(gè)抽象類(lèi),但是可以實(shí)現(xiàn)多個(gè)接口

3.接口中的成員變量只能是public static final類(lèi)型的,抽象類(lèi)中的成員變量可以是各種類(lèi)型的

4.接口只能定義抽象方法;抽象類(lèi)既可以定義抽象方法,也可以定義實(shí)現(xiàn)的方法

5.接口中不能含有靜態(tài)代碼塊以及靜態(tài)方法(static修飾的方法),抽象類(lèi)可以有靜態(tài)代碼塊和靜態(tài)方法


接口與抽象類(lèi)的相同點(diǎn)

1.都可以被繼承

2.都不能被直接實(shí)例化

3.都可以包含抽象方法

4.派生類(lèi)必須實(shí)現(xiàn)未實(shí)現(xiàn)的方法


后續(xù)持續(xù)更新...


我是小鯨魚(yú),一條努力向深海奔跑的小鯨魚(yú)

最后編輯于
?著作權(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)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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