日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

好程序員Java分享實(shí)用教程系列之對(duì)象的轉(zhuǎn)型

 好程序員IT 2019-12-11

好程序員Java教程今日分享實(shí)用的大數(shù)據(jù)之對(duì)象的轉(zhuǎn)型

> 體現(xiàn):

>

> 1. 父類(lèi)的引用可以指向子類(lèi)的對(duì)象

> 2. 接口的引用可以指向?qū)崿F(xiàn)類(lèi)的對(duì)象

> 轉(zhuǎn)型:

>

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

>    1. 由子類(lèi)類(lèi)型轉(zhuǎn)型為父類(lèi)類(lèi)型,或者由實(shí)現(xiàn)類(lèi)類(lèi)型轉(zhuǎn)型為接口類(lèi)型

>    2. 向上轉(zhuǎn)型一定會(huì)成功,是一個(gè)隱式轉(zhuǎn)換

>    3. 向上轉(zhuǎn)型后的對(duì)象,將只能訪問(wèn)父類(lèi)或者接口中的成員

> 2. 向下轉(zhuǎn)型

>    1. 由父類(lèi)類(lèi)型轉(zhuǎn)型為子類(lèi)類(lèi)型,或者由接口類(lèi)型轉(zhuǎn)型為實(shí)現(xiàn)類(lèi)類(lèi)型

>    2. 向下轉(zhuǎn)型可能會(huì)失敗,是一個(gè)顯式轉(zhuǎn)換

>    3. 向下轉(zhuǎn)型后的對(duì)象,將可以訪問(wèn)子類(lèi)或者實(shí)現(xiàn)類(lèi)中特有的成員

####instanceof關(guān)鍵字

> 1. 針對(duì)于向下轉(zhuǎn)型的。

>

>    1. 如果向下轉(zhuǎn)型不成功,會(huì)怎樣?

>

>       1. 會(huì)有一個(gè)異常 ClassCastException

>

>    2. 如何避免這種情況?

>

>       1. 在向下轉(zhuǎn)型之前,我們先判斷一下這個(gè)對(duì)象是不是要轉(zhuǎn)型的類(lèi)型

>

>       2. 怎么判斷?

>

>          1. 關(guān)鍵字 **instanceof**

>

>             ```java

>             Animal animal = new Dog();

>             if (animal instanceof Dog) {

>                 // 說(shuō)明animal的確是一個(gè)Dog

>             }

>             ```

> 如果一個(gè)類(lèi)中重寫(xiě)了父類(lèi)的某一個(gè)方法。此時(shí):

>

> 1. 如果用這個(gè)類(lèi)的對(duì)象來(lái)調(diào)用這個(gè)方法,最終執(zhí)行的是子類(lèi)的實(shí)現(xiàn)。

> 2. 如果用向上轉(zhuǎn)型后的對(duì)象來(lái)調(diào)用這個(gè)方法,執(zhí)行的依然是子類(lèi)的實(shí)現(xiàn)。

>    1. 因?yàn)橄蛏限D(zhuǎn)型后的對(duì)象,歸根到底還是子類(lèi)對(duì)象。

#### 抽象類(lèi)與抽象方法

> 抽象:**abstract**

>

>  

>

> 抽象類(lèi):

>

> 用關(guān)鍵字abstract修飾的類(lèi),就是抽象類(lèi)

>

> 抽象方法:

>

> 用關(guān)鍵字abstract修飾的方法,就是抽象方法

> 特點(diǎn):

>

> 抽象方法:

>

>  1. 抽象方法使用abstract來(lái)修飾,只有聲明,沒(méi)有實(shí)現(xiàn)。

>

>     ```java

>     public abstract void bark();

>     ```

>

> 2. 抽象方法,只能夠?qū)懺诔橄箢?lèi)中。

>

> 抽象類(lèi):

>

> 1. 抽象類(lèi)使用abstract來(lái)修飾,抽象類(lèi)不能實(shí)例化對(duì)象。

> 2. 抽象類(lèi)中是可以寫(xiě)非靜態(tài)的成員的,這時(shí)候這些非靜態(tài)成員是可以繼承給子類(lèi)的。

> 3. 抽象類(lèi)中是可以包含構(gòu)造方法的。

>

> 結(jié)合抽象類(lèi)和抽象方法:

>

> 1. 非抽象子類(lèi)在繼承一個(gè)抽象父類(lèi)的同時(shí),要實(shí)現(xiàn)父類(lèi)中所有的抽象方法。

> 注意事項(xiàng):

>

> **final**關(guān)鍵字

>

> 1. 抽象類(lèi)可以用final來(lái)修飾嗎?

>    1. 不能!因?yàn)?/span>final表示這個(gè)類(lèi)無(wú)法被繼承。但是對(duì)于抽象類(lèi)來(lái)說(shuō),如果無(wú)法被繼承,則這個(gè)抽象類(lèi)沒(méi)有任何意義。

> 2. 抽象方法可以用final修飾嗎?

>    1. 不能!因?yàn)?/span>final修飾的方法無(wú)法被重寫(xiě)。但是抽象方法又只能寫(xiě)在抽象類(lèi)中。如果一個(gè)抽象方法用final來(lái)修飾了,此時(shí)這個(gè)方法將無(wú)法被非抽象子類(lèi)重寫(xiě),那這個(gè)子類(lèi)就會(huì)有問(wèn)題。

> 抽象類(lèi)和抽象方法的實(shí)用場(chǎng)景:

>

> 可以用抽象類(lèi)和抽象方法來(lái)實(shí)現(xiàn)一些簡(jiǎn)單規(guī)則的制定。

>

> 例如:所有的快遞公司都必須要會(huì)xxxxx。KFC、麥當(dāng)勞、

>

> 如果僅僅用抽象類(lèi)和抽象方法來(lái)進(jìn)行規(guī)則指定、行為約束:

>

> 弊端:因?yàn)?/span>Java是單繼承的語(yǔ)言,如果一個(gè)類(lèi)為了遵循某一種規(guī)范,而去繼承一個(gè)抽象類(lèi),此時(shí)這個(gè)類(lèi)將無(wú)法再繼承其他類(lèi)。

>

> 為了解決這樣的問(wèn)題,我么可以使用接口進(jìn)行行為約束,規(guī)范代碼。

#### 接口

> 關(guān)鍵字:**interface**

>

>  

>

> 語(yǔ)法:

>

> 和類(lèi)是比較像的,但是他不是類(lèi)

>

> ```java

> [訪問(wèn)權(quán)限修飾符] interface 接口名字 {

>     // 接口中的成員

> }

> ```

>

>   1. 訪問(wèn)權(quán)限修飾符:和類(lèi)一樣,只能有 public 和默認(rèn)的default權(quán)限。

>   2. 接口不是類(lèi),不能實(shí)例化對(duì)象。

>   3. 接口,暫時(shí)和類(lèi)寫(xiě)成平級(jí)的關(guān)系。

>   4. 接口名字是一個(gè)標(biāo)識(shí)符,遵循大駝峰命名法

> 接口中成員的定義:

>

> 1. 屬性:接口中的屬性,默認(rèn)的修飾符是 **public static final**

> 2. 構(gòu)造方法:接口中不能寫(xiě)構(gòu)造方法

> 3. 方法:

>    1. 接口中的方法都是抽象方法

>    2. 接口中的方法訪問(wèn)權(quán)限修飾符都是public

> 接口是需要被類(lèi)來(lái)實(shí)現(xiàn)的。

>

> 實(shí)現(xiàn)接口關(guān)鍵字: **implements**

>

> 讓類(lèi)實(shí)現(xiàn)接口:

>

> ```java

> public class Shunfeng extends Company implements Express {

>     

> }

> ```

>

> 1. 一個(gè)非抽象類(lèi)在實(shí)現(xiàn)接口后,需要實(shí)現(xiàn)接口中所有的抽象方法。

>

> 2. 一個(gè)類(lèi)在繼承自一個(gè)父類(lèi)后,還可以再去實(shí)現(xiàn)接口。

>

>    1. 如果同時(shí)有父類(lèi)和接口,那么繼承父類(lèi)在前,實(shí)現(xiàn)接口在后

>

> 3. 一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口

>

>    1. 如果一個(gè)類(lèi)實(shí)現(xiàn)的多個(gè)接口中有相同的方法,這個(gè)方法在實(shí)現(xiàn)類(lèi)中只需要實(shí)現(xiàn)一次即可。

>

> 4. 接口之間是有繼承關(guān)系的,而且接口之間的繼承是多繼承。

>

>    ```java

>    public interface GrilFriend extends HouseKeeping, Takecare {

>    

>    }

>    ```

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多