新聞中心
一、多態(tài)

1.假設(shè)實(shí)現(xiàn)一個(gè)動(dòng)物發(fā)出的叫聲方法,我們知道不同的動(dòng)物,它們的叫聲是不一樣的。當(dāng)在方法中傳入一個(gè)參數(shù)類(lèi)型,例如貓的叫聲、狗的叫聲。在同一個(gè)方法,當(dāng)參數(shù)不同它們的執(zhí)行結(jié)果各不相同,這就是多態(tài)。
2.多態(tài)是把子類(lèi)對(duì)象賦給父類(lèi)引用時(shí),調(diào)用重寫(xiě)的方法時(shí),表示的是子類(lèi)的行為。
3.怎么實(shí)現(xiàn)多態(tài)例子
- //定義接口Fruit
- interface Fruit{
- void info();//定義抽象方法info()
- }
- //定義Cherry類(lèi)實(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類(lèi)實(shí)現(xiàn)Fruit接口
- class Apple implements Fruit{
- double weight=250;//weight屬性為重量
- //實(shí)現(xiàn)info()方法
- public void info(){
- System.out.println("我是一個(gè)蘋(píng)果!"+"重量為:"+weight+"g");
- }
- }
- public class p30 {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Fruit f1=new Cherry();//創(chuàng)建Cherry對(duì)象,F(xiàn)ruit類(lèi)型變量f1引用
- Fruit f2=new Apple();//創(chuàng)建Apple對(duì)象,F(xiàn)ruit類(lèi)型變量f2引用
- fruitInfo(f1);//調(diào)用fruitInfo()方法,把f1參數(shù)傳入
- fruitInfo(f2);//調(diào)用fruitInfo()方法,把f2參數(shù)傳入
- }
- //定義靜態(tài)的fruitInfo()方法,接受一個(gè)Fruit的參數(shù)f
- public static void fruitInfo(Fruit f){
- f.info();
- }
- }
運(yùn)行的結(jié)果是:
- 我是一個(gè)櫻桃!重量為:66.0g
- 我是一個(gè)蘋(píng)果!重量為:250.0g
我是一個(gè)櫻桃!重量為:66.0g我是一個(gè)蘋(píng)果!重量為:250.0g
從上面代碼中,定義了一個(gè)Fruit接口,定義了抽象方法info()。定義Cherry類(lèi)和Apple類(lèi)實(shí)現(xiàn)Fruit接口,定義變量weight屬性和實(shí)現(xiàn)info()方法。“Fruit f1=new Cherry()、Fruit f2=new Apple()”實(shí)現(xiàn)子類(lèi)對(duì)象賦給父類(lèi)引用,調(diào)用fruitInfo()方法,父類(lèi)引用了兩個(gè)子類(lèi)對(duì)象分別傳入f1和f2參數(shù)。
二、對(duì)象類(lèi)型轉(zhuǎn)換
1.子類(lèi)對(duì)象是可以自動(dòng)轉(zhuǎn)換成父類(lèi)。
2.父類(lèi)轉(zhuǎn)換成子類(lèi)對(duì)象就需要強(qiáng)制轉(zhuǎn)換。
例如:
- //定義接口Fruit
- interface Fruit{
- void info();//定義抽象方法info()
- }
- //定義Cherry類(lèi)實(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 stub
- Fruit f1=new Cherry();//創(chuàng)建Cherry類(lèi)的實(shí)例對(duì)象
- fruitInfo(f1);//調(diào)用fruitInfo()方法,把f1參數(shù)傳入
- }
- //定義靜態(tài)方法fruitInfo(),接受一個(gè)Fruit參數(shù)f
- public 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對(duì)象,方法參數(shù)是Fruit類(lèi)型的,把Cherry的子類(lèi)當(dāng)作父類(lèi)使用導(dǎo)致程序編譯出現(xiàn)錯(cuò)誤,程序在運(yùn)行到f.pro()這行代碼發(fā)現(xiàn)這個(gè)方法沒(méi)有定義。因?yàn)閭魅氲氖荂herry類(lèi),在Cherry類(lèi)中定義了pro()方法需要強(qiáng)制轉(zhuǎn)換才可以運(yùn)行,就是把Fruit類(lèi)型變量強(qiáng)制轉(zhuǎn)換成Cherry類(lèi)型。
修改后代碼如下所示:
- //定義靜態(tài)方法fruitInfo(),接受一個(gè)Fruit參數(shù)f
- public 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í)例對(duì)象是否屬于一個(gè)類(lèi),它的語(yǔ)法如下:
- 對(duì)象 instanceof 類(lèi)
2.在進(jìn)行引用類(lèi)型轉(zhuǎn)換前先使用instanceof關(guān)鍵字判斷,例如:
- if( f instanceof Cherry){ //如果f指的是Cherry對(duì)象類(lèi)型時(shí),返回的是true。
- Cherry f1=(Cherry)f;
- }
四、總結(jié)
本文主要介紹了多態(tài)、對(duì)象類(lèi)型轉(zhuǎn)換、instanceof關(guān)鍵字。
多態(tài)是子類(lèi)對(duì)象賦給父類(lèi)引用時(shí),調(diào)用重寫(xiě)的方法時(shí),表示的是子類(lèi)的行為。通過(guò)怎么實(shí)現(xiàn)多態(tài)例子幫助理解這個(gè)用法。
對(duì)象類(lèi)型轉(zhuǎn)換是子類(lèi)對(duì)象是可以自動(dòng)轉(zhuǎn)換成父類(lèi)、父類(lèi)轉(zhuǎn)換成子類(lèi)對(duì)象就需要強(qiáng)制轉(zhuǎn)換。
instanceof關(guān)鍵字用來(lái)判斷一個(gè)實(shí)例對(duì)象是否屬于一個(gè)類(lèi),希望大家通過(guò)本文的學(xué)習(xí),對(duì)你有所幫助!
分享題目:Java基礎(chǔ)入門(mén)之多態(tài)和對(duì)象類(lèi)型轉(zhuǎn)換
瀏覽地址:http://m.5511xx.com/article/cdhsipj.html


咨詢(xún)
建站咨詢(xún)
