小豬學(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)繼承并重寫。

