Java基礎(chǔ)入門之多態(tài)和對象類型轉(zhuǎn)換
后臺回復(fù)“Java”即可獲贈Java學(xué)習(xí)資料
????前面幾篇文章用Java帶大家一起了解Java的部分基礎(chǔ)知識,感興趣的小伙伴們可以去學(xué)習(xí)下了,一篇文章帶你了解Java類的設(shè)計(jì)和封裝及類成員的訪問控制、一篇文章帶你了解this關(guān)鍵字和單例模式、Java基礎(chǔ)入門篇——面向?qū)ο蠛皖惖亩x,這篇文章帶大家一起學(xué)習(xí)下Java知識中的接口及其繼承知識,一起來看看吧。
一、多態(tài)
1.假設(shè)實(shí)現(xiàn)一個(gè)動物發(fā)出的叫聲方法,我們知道不同的動物,它們的叫聲是不一樣的。當(dāng)在方法中傳入一個(gè)參數(shù)類型,例如貓的叫聲、狗的叫聲。在同一個(gè)方法,當(dāng)參數(shù)不同它們的執(zhí)行結(jié)果各不相同,這就是多態(tài)。
2.多態(tài)是把子類對象賦給父類引用時(shí),調(diào)用重寫的方法時(shí),表示的是子類的行為。
3.怎么實(shí)現(xiàn)多態(tài)例子
//定義接口Fruitinterface Fruit{void info();//定義抽象方法info()}//定義Cherry類實(shí)現(xiàn)Fruit接口class Cherry implements Fruit{double weight=66;//weight屬性為重量//實(shí)現(xiàn)info()方法public void info(){System.out.println("我是一個(gè)櫻桃!"+"重量為:"+weight+"g");}}//定義Apple類實(shí)現(xiàn)Fruit接口class Apple implements Fruit{double weight=250;//weight屬性為重量//實(shí)現(xiàn)info()方法public void info(){System.out.println("我是一個(gè)蘋果!"+"重量為:"+weight+"g");}}public class p30 {public static void main(String[] args) {// TODO Auto-generated method stubFruit f1=new Cherry();//創(chuàng)建Cherry對象,F(xiàn)ruit類型變量f1引用Fruit f2=new Apple();//創(chuàng)建Apple對象,F(xiàn)ruit類型變量f2引用fruitInfo(f1);//調(diào)用fruitInfo()方法,把f1參數(shù)傳入fruitInfo(f2);//調(diào)用fruitInfo()方法,把f2參數(shù)傳入}//定義靜態(tài)的fruitInfo()方法,接受一個(gè)Fruit的參數(shù)fpublic static void fruitInfo(Fruit f){f.info();}}
運(yùn)行的結(jié)果是:
我是一個(gè)櫻桃!重量為:66.0g我是一個(gè)蘋果!重量為:250.0g
從上面代碼中,定義了一個(gè)Fruit接口,定義了抽象方法info()。定義Cherry類和Apple類實(shí)現(xiàn)Fruit接口,定義變量weight屬性和實(shí)現(xiàn)info()方法?!癋ruit f1=new Cherry()、Fruit f2=new Apple()”實(shí)現(xiàn)子類對象賦給父類引用,調(diào)用fruitInfo()方法,父類引用了兩個(gè)子類對象分別傳入f1和f2參數(shù)。
二、對象類型轉(zhuǎn)換
1.子類對象是可以自動轉(zhuǎn)換成父類。
2.父類轉(zhuǎn)換成子類對象就需要強(qiáng)制轉(zhuǎn)換。
例如:
//定義接口Fruitinterface Fruit{void info();//定義抽象方法info()}//定義Cherry類實(shí)現(xiàn)Fruit接口class Cherry implements Fruit{double weight=66;//weight屬性為重量//實(shí)現(xiàn)info()方法public void info(){System.out.println("我是一個(gè)櫻桃!"+"重量為:"+weight+"g");}//定義pro()方法void pro(){System.out.println("產(chǎn)地:浙江");}}public class p31 {public static void main(String[] args) {// TODO Auto-generated method stubFruit f1=new Cherry();//創(chuàng)建Cherry類的實(shí)例對象fruitInfo(f1);//調(diào)用fruitInfo()方法,把f1參數(shù)傳入}//定義靜態(tài)方法fruitInfo(),接受一個(gè)Fruit參數(shù)fpublic static void fruitInfo(Fruit f){f.info();//調(diào)用傳入?yún)?shù)f的info()方法f.pro();//調(diào)用傳入?yún)?shù)f的pro()方法}}
運(yùn)行的結(jié)果是:

從上面可以看出編譯出錯(cuò)了,調(diào)用fruitInfo()方法傳入Cherry對象,方法參數(shù)是Fruit類型的,把Cherry的子類當(dāng)作父類使用導(dǎo)致程序編譯出現(xiàn)錯(cuò)誤,程序在運(yùn)行到f.pro()這行代碼發(fā)現(xiàn)這個(gè)方法沒有定義。因?yàn)閭魅氲氖荂herry類,在Cherry類中定義了pro()方法需要強(qiáng)制轉(zhuǎn)換才可以運(yùn)行,就是把Fruit類型變量強(qiáng)制轉(zhuǎn)換成Cherry類型。
修改后代碼如下所示:
//定義靜態(tài)方法fruitInfo(),接受一個(gè)Fruit參數(shù)fpublic static void fruitInfo(Fruit f){Cherry f1=(Cherry)f;f1.info();//調(diào)用傳入?yún)?shù)f的info()方法f1.pro();//調(diào)用傳入?yún)?shù)f的pro()方法}
再次運(yùn)行的結(jié)果是:
我是一個(gè)櫻桃!重量為:66.0g產(chǎn)地:浙江
三、instanceof關(guān)鍵字
1.instanceof關(guān)鍵字作用
判斷一個(gè)實(shí)例對象是否屬于一個(gè)類,它的語法如下:
對象 instanceof 類2.在進(jìn)行引用類型轉(zhuǎn)換前先使用instanceof關(guān)鍵字判斷,例如:
if( f instanceof Cherry){ //如果f指的是Cherry對象類型時(shí),返回的是true。Cherry f1=(Cherry)f;}
四、總結(jié)
本文主要介紹了多態(tài)、對象類型轉(zhuǎn)換、instanceof關(guān)鍵字。
多態(tài)是子類對象賦給父類引用時(shí),調(diào)用重寫的方法時(shí),表示的是子類的行為。通過怎么實(shí)現(xiàn)多態(tài)例子幫助理解這個(gè)用法。
對象類型轉(zhuǎn)換是子類對象是可以自動轉(zhuǎn)換成父類、父類轉(zhuǎn)換成子類對象就需要強(qiáng)制轉(zhuǎn)換。
instanceof關(guān)鍵字用來判斷一個(gè)實(shí)例對象是否屬于一個(gè)類,希望大家通過本文的學(xué)習(xí),對你有所幫助!
-------------------?End?-------------------
往期精彩文章推薦:
一篇文章帶你了解Java繼承那些事兒
一篇文章教會你使用Java中的super關(guān)鍵字基本用法
一篇文章帶你了解Java中的static關(guān)鍵字和靜態(tài)變量、靜態(tài)方法
一篇文章帶你了解Java類的設(shè)計(jì)和封裝及類成員的訪問控制

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Java學(xué)習(xí)群請?jiān)诤笈_回復(fù)【入群】
萬水千山總是情,點(diǎn)個(gè)【在看】行不行
