java數組、泛型、集合在多態中的使用及對比,java多態

來源:互聯網
上載者:User

java數組、泛型、集合在多態中的使用及對比,java多態

我們在使用數組,泛型集合的過程中不可避免的會碰到多態,或者說什麼情況下能如何使用父數組引用子數組(集合、泛型)呢?

數組在多態中的使用

元素為父類型的數組引用可指向元素為子類型的數組對象

當數組被調用時由當前引用確定數組元素的類型

當元素為父類型的數組引用指向了元素為子類型的數組對象時,不可通過父類型的數組引用向集合加入除子類型及其下層級的之外的元素(可通過編譯,運行過程出錯)

 1 /*驗證: 2  *animals和dogs可以引用同一個數組 3  *當animals引用數組時,數組元素為Animal類型 4  *當dogs引用數組時,數組元素為Dog類型 5 */ 6  7 public class Animal{ 8     private void showClass(){ 9         System.out.println("數組元素為Animal類型");10     }11     12     public static void main(String[] args){13         //animals和dogs可以引用同一個數組14         Dog[] dogs = {new Dog(), new Dog()};15         Animal[] animals = dogs;16         17         //當animals引用數組時,數組元素為Animal類型18         animals[0].showClass();    19         //當dogs引用數組時,數組元素為Dog類型20         dogs[0].showClass();21         //不可通過父類型的數組引用向集合加入除子類型及其下層級的之外的元素(可通過編譯,運行過程出錯)22         animals[0] = new Animal(); 23     }24     25 }26 27 class Dog extends Animal{28     public void showClass(){29         System.out.println("數組元素為Dog類型");30     }31 }

 

泛型在多態中的使用

ArrayList<父類型>無法引用ArrayList<子類型>

 1 /*驗證: 2  *animals無法引用dogs數組 3  * 4 */ 5 import java.util.*; 6  7 public class Animal{ 8      9     public static void main(String[] args){10         //animals無法引用dogs數組11         ArrayList<Dog> dogs = new ArrayList<Dog>(); 12         ArrayList<Animal> animals = dogs;    /* 無法通過編譯 */13     }14     15 }16 17 18 class Dog extends Animal{19     20 }

 

為了彌補泛型的缺陷,java引入了一種“萬用字元”——ArrayList<? extends object>
此類型集合可引用任何參數上繼承、實現了參數類型(包括參數類型本身)的集合

 1 /*萬用字元 2  *animals可以引用dogs集合 3  *當animals引用集合時,集合元素為Dog類型 4  *當dogs引用集合時,集合元素為Dog類型 5  *無法通過animals對集合進行修改 6  */ 7 import java.util.*; 8  9 public class Animal{10     public void showClass(){11         System.out.println("集合元素為Animal類型");12     }13     14     public static void main(String[] args){15         //animals可以引用dogs數組16         ArrayList<Dog> dogs = new ArrayList<Dog>(); 17         dogs.add(new Dog());18         ArrayList<? extends Animal> animals = dogs;    19         //當animals引用集合時,集合元素為Dog類型20         animals.get(0).showClass();21         //當dogs引用集合時,集合元素為Dog類型22         dogs.get(0).showClass();23         //無法通過animals對集合進行修改(無法通過編譯)24         //animals.add(new Dog());25         26     }27     28 }29 30 31 class Dog extends Animal{32     public void showClass(){33         System.out.println("集合元素為Dog類型");34     }35 }

集合在多態中的使用

當然List<object>集合可引用ArrayList<object>集合

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.