我們在使用數(shù)組,泛型集合的過程中不可避免的會碰到多態(tài),或者說什么情況下能如何使用父數(shù)組引用子數(shù)組(集合、泛型)呢?
創(chuàng)新互聯(lián)是一家專業(yè)提供久治企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為久治眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
數(shù)組在多態(tài)中的使用
元素為父類型的數(shù)組引用可指向元素為子類型的數(shù)組對象
當(dāng)數(shù)組被調(diào)用時(shí)由當(dāng)前引用確定數(shù)組元素的類型
當(dāng)元素為父類型的數(shù)組引用指向了元素為子類型的數(shù)組對象時(shí),不可通過父類型的數(shù)組引用向集合加入除子類型及其下層級的之外的元素(可通過編譯,運(yùn)行過程出錯(cuò))
/*驗(yàn)證: *animals和dogs可以引用同一個(gè)數(shù)組 *當(dāng)animals引用數(shù)組時(shí),數(shù)組元素為Animal類型 *當(dāng)dogs引用數(shù)組時(shí),數(shù)組元素為Dog類型 */ public class Animal{ private void showClass(){ System.out.println("數(shù)組元素為Animal類型"); } public static void main(String[] args){ //animals和dogs可以引用同一個(gè)數(shù)組 Dog[] dogs = {new Dog(), new Dog()}; Animal[] animals = dogs; //當(dāng)animals引用數(shù)組時(shí),數(shù)組元素為Animal類型 animals[0].showClass(); //當(dāng)dogs引用數(shù)組時(shí),數(shù)組元素為Dog類型 dogs[0].showClass(); //不可通過父類型的數(shù)組引用向集合加入除子類型及其下層級的之外的元素(可通過編譯,運(yùn)行過程出錯(cuò)) animals[0] = new Animal(); } } class Dog extends Animal{ public void showClass(){ System.out.println("數(shù)組元素為Dog類型"); } }
泛型在多態(tài)中的使用
ArrayList<父類型>無法引用ArrayList<子類型>
/*驗(yàn)證: *animals無法引用dogs數(shù)組 * */ import java.util.*; public class Animal{ public static void main(String[] args){ //animals無法引用dogs數(shù)組 ArrayList<Dog> dogs = new ArrayList<Dog>(); ArrayList<Animal> animals = dogs; /* 無法通過編譯 */ } } class Dog extends Animal{ }
為了彌補(bǔ)泛型的缺陷,java引入了一種“萬用字符”——ArrayList<? extends object>
此類型集合可引用任何參數(shù)上繼承、實(shí)現(xiàn)了參數(shù)類型(包括參數(shù)類型本身)的集合
/*萬用字符 *animals可以引用dogs集合 *當(dāng)animals引用集合時(shí),集合元素為Dog類型 *當(dāng)dogs引用集合時(shí),集合元素為Dog類型 *無法通過animals對集合進(jìn)行修改 */ import java.util.*; public class Animal{ public void showClass(){ System.out.println("集合元素為Animal類型"); } public static void main(String[] args){ //animals可以引用dogs數(shù)組 ArrayList<Dog> dogs = new ArrayList<Dog>(); dogs.add(new Dog()); ArrayList<? extends Animal> animals = dogs; //當(dāng)animals引用集合時(shí),集合元素為Dog類型 animals.get(0).showClass(); //當(dāng)dogs引用集合時(shí),集合元素為Dog類型 dogs.get(0).showClass(); //無法通過animals對集合進(jìn)行修改(無法通過編譯) //animals.add(new Dog()); } } class Dog extends Animal{ public void showClass(){ System.out.println("集合元素為Dog類型"); } }
集合在多態(tài)中的使用
當(dāng)然List<object>集合可引用ArrayList<object>集合
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持創(chuàng)新互聯(lián)!
網(wǎng)站標(biāo)題:java數(shù)組、泛型、集合在多態(tài)中的使用及對比
文章源于:http://vcdvsql.cn/article6/pegcig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、全網(wǎng)營銷推廣、網(wǎng)站策劃、自適應(yīng)網(wǎng)站、網(wǎng)站設(shè)計(jì)、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)