JAVA入門小小白學(xué)習(xí)中ing(對(duì)象的多態(tài)性)

小豬學(xué)習(xí)


小小白慢慢學(xué)習(xí)中ing 第十四天

努力努力


本日內(nèi)容(向上向下轉(zhuǎn)型、instanceof、對(duì)象的多態(tài)性的應(yīng)用、abstract關(guān)鍵字)


1、 引用了類型作為參數(shù)

設(shè)計(jì)方法的時(shí)候:方法中可能需要參數(shù)(數(shù)據(jù)類型 參數(shù)名)

數(shù)據(jù)類型:

基本類型:byte,short,int,long,float,double,char,boolean

作為參數(shù)傳遞的時(shí)候:傳的是數(shù)值。

int i = 100;

引用類型:數(shù)組,對(duì)象。。。

作為參數(shù)傳遞的時(shí)候:傳的是引用的地址

2、對(duì)象的多態(tài)性

指的是子類對(duì)象的多種形態(tài):

????????子類對(duì)象--->看成父類的類型。

????????子類對(duì)象--->看成子類的類型。

1、如果聲明了一個(gè)父類類型的引用(=左邊),創(chuàng)建的是父類的對(duì)象(=右邊)。

????????可以訪問(wèn)父類的屬性和方法。(不能訪問(wèn)子類的)

2、如果聲明了一個(gè)子類類型的引用(=左邊),創(chuàng)建的也是子類的對(duì)象(=右邊)。

????????可以訪問(wèn)父類的屬性和方法。

????????還可以訪問(wèn)子類的新增。

????????以及子類的重寫。

3、如果聲明了一個(gè)父類類型的引用(=左邊),但是實(shí)際上指向了一個(gè)子類對(duì)象。(=右邊)

????????可以訪問(wèn)父類的屬性和方法。

以及子類重寫的方法。但是不能訪問(wèn)子類的新增。

2.1、向上轉(zhuǎn)型和向下轉(zhuǎn)型

向上轉(zhuǎn)型:一個(gè)子類對(duì)象,看成了父類的類型。(自動(dòng)轉(zhuǎn)換)

????????那么只能訪問(wèn)父類的屬性和方法,以及子類重寫的方法。失去了子類的新增。

向下轉(zhuǎn)型:向上轉(zhuǎn)型后,子類對(duì)象看成了父類類型,然后再看成子類類型。(強(qiáng)制轉(zhuǎn)換)

??????? 可以重新訪問(wèn)子類的新增屬性和方法。

向下轉(zhuǎn)型的注意點(diǎn):不是所有的父類引用都能轉(zhuǎn)成子類類型。向下轉(zhuǎn)型的前提:是一個(gè)子類對(duì)象先向上轉(zhuǎn)型了,再轉(zhuǎn)回來(lái),那是可以的。但是如果沒(méi)有向上轉(zhuǎn)型,直接父類對(duì)象轉(zhuǎn)為子類類型,報(bào)錯(cuò):ClassCastException。

看一個(gè)引用,能夠訪問(wèn)哪些成員:

看=左邊是什么類型的聲明:

父類類型:那么能夠訪問(wèn)父類中聲明屬性和方法。

看一個(gè)引用,具體執(zhí)行的方法,是否重寫了:

看=右邊是什么類型的對(duì)象:

如果是父類的對(duì)象,執(zhí)行沒(méi)有重寫的方法,父類的方法。

如果是子類的對(duì)象,執(zhí)行的是重寫的方法,子類重寫后的方法。

看戲:國(guó)粹,京劇

京劇大師:--->

給大家唱戲:

京劇大師:發(fā)門票,,要來(lái)看戲了。。

病了,無(wú)法登臺(tái)表演。。。

傳承:子承父業(yè)。兒子也是唱戲的。

兒子畫個(gè)花臉上臺(tái)假裝爸爸:裝爹。

只能唱爹的歌。。。重寫的方法。

下臺(tái)卸妝,我是兒子了

可以唱自己的新歌了。。

2.2、 instanceof

子類對(duì)象向上轉(zhuǎn)型,為父類的類型。自動(dòng)完成。

但是把一個(gè)父類的引用,再轉(zhuǎn)回子類類型。就可能會(huì)存在問(wèn)題。

語(yǔ)法:引用 instanceof 類名

得到的結(jié)果:boolean類型

對(duì)于對(duì)象的多態(tài)性,如果想向下轉(zhuǎn)型,那么應(yīng)該先加個(gè)邏輯判斷。判斷該引用指向?qū)ο笫欠袷且D(zhuǎn)換的類型。否則的話,會(huì)產(chǎn)生錯(cuò)誤:ClassCastException,打斷程序的執(zhí)行。

所以:所有的向下轉(zhuǎn)型之前,都應(yīng)該使用instanceof進(jìn)行判斷。

? ?向上轉(zhuǎn)型不需要:子類 is a 父類

2.3、 對(duì)象的多態(tài)性的應(yīng)用

如果一個(gè)方法,接收了父類類型作為參數(shù),那么實(shí)際上傳入父類對(duì)象和其他的任意子類對(duì)象都可以。

如果傳入子類對(duì)象的話,會(huì)發(fā)生對(duì)象的向上轉(zhuǎn)型。

3、多態(tài)性

多態(tài)性:事物的多種形態(tài)。

方法:方法的多種形態(tài),指的就是方法的重載。一個(gè)功能方法,但是根據(jù)參數(shù)不同,執(zhí)行的具體方法也不同。叫做靜態(tài)多態(tài)。程序編譯時(shí)發(fā)生的多態(tài)。

對(duì)象:對(duì)象的多態(tài)性,結(jié)合方法的重寫。一個(gè)子類對(duì)象,如果看成父類的類型,那么執(zhí)行的方法就只能父類的以及子類重寫的。如果再把該對(duì)象向下轉(zhuǎn)型轉(zhuǎn)為子類類型,才可以執(zhí)行子類的新增方法。

1、方法的重載:

public void getSum(int i,int j){

}

public void getSum(double d1,double d2){

}

2、對(duì)象的多態(tài)性:子類對(duì)象??闯筛割愵愋?向上轉(zhuǎn)型),或者看成子類類型(向下轉(zhuǎn)型)。

? 方法的重寫:

? Animal a = new Animal();//父類類型引用,只能執(zhí)行父類的方法。

父類的方法。不是重寫的

? Animal a1 = new Cat();//父類類型引用,執(zhí)行重寫后的方法。父類的方法。

子類重寫后的方法。

Cat c1 = (Cat)a1;//子類類型的引用,執(zhí)行的值重寫后的方法,以及子類的新增方法

4、abstract關(guān)鍵字

表示抽象的意思。

1、可以修飾方法:表示該方法是抽象的?該方法沒(méi)有方法體。

abstract修飾的方法,表示抽象的方法。沒(méi)有方法體。

2、可以修飾類:表示該類是抽象的?該類就不能被實(shí)例化(不能創(chuàng)建對(duì)象)。

如果一個(gè)類中,包含了至少一個(gè)抽象方法。那么該類也必須是抽象的。抽象類必須要有子類繼承,并重寫這個(gè)抽象方法。如果子類沒(méi)有實(shí)現(xiàn)這個(gè)抽象方法,那么子類也是抽象的,再等待子類來(lái)繼承并重寫。




希望我能堅(jiān)持住每天堅(jiān)持記錄著 ...

?著作權(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),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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