真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

第13講面向對象三大特征之多態(tài)-創(chuàng)新互聯(lián)

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

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

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

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

多態(tài)的形式:

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

  • 有方法重寫

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

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

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

編譯看左邊,運行看左邊 (因為成員變量沒有重寫)

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

編譯看左邊,運行看右邊 (因為成員方法有重寫)

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

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

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

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

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

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

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

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

從子到父

  • 父類引用指向子類對象
//向上轉型
Animal ani = new Cat();	
5.2 向下轉型(強制類型轉換)

從父到子

  • 父類引用轉為子類對象

作用: 可以轉為真正的子類類型,從而調用子類獨有的功能

轉換類型與真實對象類型不一致的時候會報錯,所以:

轉型需謹慎,要加以判斷:

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

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

關于強轉前的判斷,jdk14以后有新特性:

語法:a instanceof B b

? //變量a是不是B類型,如果是,則強轉為B類型,轉換后的變量名更改為b;如果不是不強轉,結果為false

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

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


本文題目:第13講面向對象三大特征之多態(tài)-創(chuàng)新互聯(lián)
網(wǎng)頁鏈接:http://weahome.cn/article/degjjg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部