第13講面向?qū)ο笕筇卣髦鄳B(tài)-創(chuàng)新互聯(lián)

第13講
    • 1 多態(tài)簡(jiǎn)述
    • 2 多態(tài)的使用前提
    • 3 多態(tài)中成員訪問特點(diǎn)
      • 3.1 成員變量
      • 3.2 成員方法
    • 4 多態(tài)的利與弊
      • 好處
      • 弊端
    • 5 多態(tài)的轉(zhuǎn)型
      • 5.1 向上轉(zhuǎn)型(自動(dòng)類型轉(zhuǎn)換)
      • 5.2 向下轉(zhuǎn)型(強(qiáng)制類型轉(zhuǎn)換)

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、漣水網(wǎng)絡(luò)推廣、小程序定制開發(fā)、漣水網(wǎng)絡(luò)營(yíng)銷、漣水企業(yè)策劃、漣水品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供漣水建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:muchs.cn1 多態(tài)簡(jiǎn)述

同一個(gè)對(duì)象,在不同時(shí)刻表現(xiàn)出來的不同形態(tài)就叫多態(tài)

  • 例如:
    • 貓是貓:貓 cat = new 貓()
    • 貓是動(dòng)物:動(dòng)物 animal = new 貓()

多態(tài)的形式:

  • 具體類多態(tài)
  • 抽象類多態(tài)
  • 接口多態(tài)
2 多態(tài)的使用前提
  • 有 繼承 / 實(shí)現(xiàn) 關(guān)系

  • 有方法重寫

  • 有父(類 / 接口)引用指向(子 / 實(shí)現(xiàn))類對(duì)象👇

    //父類引用  指向  子類對(duì)象
    父類 對(duì)象名 = new 子類名();
    
    //父接口引用  指向  實(shí)現(xiàn)類對(duì)象
    接口名 對(duì)象名 = new 實(shí)現(xiàn)類名();
3 多態(tài)中成員訪問特點(diǎn)
public class Animal() {public int height = 10;
    
    public void eat() {Sout: "動(dòng)物吃東西";
    }
}

class Cat extends Animal() {public int height = 20;
    public int weight = 40;
    
    @Override
    public void eat() {Sout: "貓吃魚";
    }
    
    public void play() {Sout: "貓玩老鼠";
    }
}
3.1 成員變量

編譯看左邊,運(yùn)行看左邊 (因?yàn)槌蓡T變量沒有重寫)

  1. 編譯看左邊:javac在編譯代碼的時(shí)候,會(huì)看左邊(父類)有沒有這個(gè)成員變量
  2. 運(yùn)行看左邊:java在運(yùn)行代碼的時(shí)候,會(huì)拿左邊(父類)的成員變量的值作為最終值
public class Demo() {public static void main(String[] args) {Animal ani = new Cat();
    
        Sout: ani.height;// 輸出:10  (來自父類)
        
    	Sout: ani.weight;// 報(bào)錯(cuò),因?yàn)锳nimal類里沒有成員變量weight
    }
}
3.2 成員方法

編譯看左邊,運(yùn)行看右邊 (因?yàn)槌蓡T方法有重寫)

  1. 編譯看左邊:javac在編譯代碼的時(shí)候,會(huì)看左邊(父類)有沒有這個(gè)成員方法
  2. 運(yùn)行看右邊:java在運(yùn)行代碼的時(shí)候,會(huì)拿右邊(子類)的成員方法作為最終值
public class Demo() {public static void main(String[] args) {Animal ani = new Cat();
        
    	ani.age();// 輸出:貓吃魚 (來自子類)
    	
    	ani.play();//報(bào)錯(cuò),因?yàn)锳nimal類沒有成員方法play()
    }
}
4 多態(tài)的利與弊 好處
  • 定義方法時(shí),使用父類型作為參數(shù),可以接收所有的子類對(duì)象。以后再使用的時(shí)候,只需要使用具體的子類型參與操作即可。提高了程序的擴(kuò)展性

  • 在多態(tài)形式下,右邊對(duì)象可以實(shí)現(xiàn)解耦合,便于擴(kuò)展和維護(hù)。

    ? 如 A extends C, B extends C。C類中有一個(gè)工作:打掃衛(wèi)生。

    ? 起初A類對(duì)象在打掃衛(wèi)生:C c = new A();c.work();

    ? 現(xiàn)在想讓B類對(duì)象去打掃衛(wèi)生,只需要改變子類對(duì)象C c = new B();,后續(xù)所有的代碼都不需要更改。

弊端
  • 不能使用子類的特有功能(解決方法見下:多態(tài)的轉(zhuǎn)型)
public class Demo() {public static void main(String[] args) {Animal ani = new Cat();
        
    	ani.age();// 輸出:貓吃魚 (來自子類)
    	
    	ani.play();//報(bào)錯(cuò),因?yàn)锳nimal類沒有成員方法play()
    }
}

class Animal() {public int height = 10;
    
    public void eat() {Sout: "動(dòng)物吃東西";
    }
}

class Cat extends Animal() {public int height = 20;
    public int weight = 40;
    
    @Override
    public void eat() {Sout: "貓吃魚";
    }
    
    public void play() {Sout: "貓玩老鼠";
    }
}
5 多態(tài)的轉(zhuǎn)型 5.1 向上轉(zhuǎn)型(自動(dòng)類型轉(zhuǎn)換)

從子到父

  • 父類引用指向子類對(duì)象
//向上轉(zhuǎn)型
Animal ani = new Cat();	
5.2 向下轉(zhuǎn)型(強(qiáng)制類型轉(zhuǎn)換)

從父到子

  • 父類引用轉(zhuǎn)為子類對(duì)象

作用: 可以轉(zhuǎn)為真正的子類類型,從而調(diào)用子類獨(dú)有的功能

轉(zhuǎn)換類型與真實(shí)對(duì)象類型不一致的時(shí)候會(huì)報(bào)錯(cuò),所以:

轉(zhuǎn)型需謹(jǐn)慎,要加以判斷:

語(yǔ)法:a instanceof B//變量a是不是B類型,如果是,返回true

public class Demo() {public static void main(String[] args) {Animal ani = new Cat();
        
        //ani是不是貓類型?是就轉(zhuǎn)型,不是就不轉(zhuǎn)
        if(ani instanceof Cat) {//向下轉(zhuǎn)型
            Cat cat = (Cat)ani;
            
            //此時(shí)就可以用子類的特有功能
            cat.play();
        } else {System.out.println("沒有該類型,無法轉(zhuǎn)換");
        }
    }
}

關(guān)于強(qiáng)轉(zhuǎn)前的判斷,jdk14以后有新特性:

語(yǔ)法:a instanceof B b

? //變量a是不是B類型,如果是,則強(qiáng)轉(zhuǎn)為B類型,轉(zhuǎn)換后的變量名更改為b;如果不是不強(qiáng)轉(zhuǎn),結(jié)果為false

if(ani instanceof Cat cat) {cat.play();
} else {System.out.println("沒有該類型,無法轉(zhuǎn)換");
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

本文題目:第13講面向?qū)ο笕筇卣髦鄳B(tài)-創(chuàng)新互聯(lián)
分享路徑:http://muchs.cn/article26/degjjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站導(dǎo)航App開發(fā)、微信公眾號(hào)、電子商務(wù)、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)