全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

java数组、泛型、集合在多态中的使用及对比

我们在使用数组,泛型集合的过程中不可避免的会碰到多态,或者说什么情况下能如何使用父数组引用子数组(集合、泛型)呢?

数组在多态中的使用

元素为父类型的数组引用可指向元素为子类型的数组对象

当数组被调用时由当前引用确定数组元素的类型

当元素为父类型的数组引用指向了元素为子类型的数组对象时,不可通过父类型的数组引用向集合加入除子类型及其下层级的之外的元素(可通过编译,运行过程出错)

/*验证:
 *animals和dogs可以引用同一个数组
 *当animals引用数组时,数组元素为Animal类型
 *当dogs引用数组时,数组元素为Dog类型
*/
public class Animal{
  private void showClass(){
    System.out.println("数组元素为Animal类型");
  }
  public static void main(String[] args){
    //animals和dogs可以引用同一个数组
    Dog[] dogs = {new Dog(), new Dog()};
    Animal[] animals = dogs;
    //当animals引用数组时,数组元素为Animal类型
    animals[0].showClass();  
    //当dogs引用数组时,数组元素为Dog类型
    dogs[0].showClass();
    //不可通过父类型的数组引用向集合加入除子类型及其下层级的之外的元素(可通过编译,运行过程出错)
    animals[0] = new Animal(); 
  }
}
class Dog extends Animal{
  public void showClass(){
    System.out.println("数组元素为Dog类型");
  }
}

泛型在多态中的使用

ArrayList<父类型>无法引用ArrayList<子类型>

/*验证:
 *animals无法引用dogs数组
 *
*/
import java.util.*;
public class Animal{
  public static void main(String[] args){
    //animals无法引用dogs数组
    ArrayList<Dog> dogs = new ArrayList<Dog>(); 
    ArrayList<Animal> animals = dogs;  /* 无法通过编译 */
  }
}
class Dog extends Animal{
}

为了弥补泛型的缺陷,java引入了一种“万用字符”——ArrayList<? extends object>

此类型集合可引用任何参数上继承、实现了参数类型(包括参数类型本身)的集合

/*万用字符
 *animals可以引用dogs集合
 *当animals引用集合时,集合元素为Dog类型
 *当dogs引用集合时,集合元素为Dog类型
 *无法通过animals对集合进行修改
 */
import java.util.*;
public class Animal{
  public void showClass(){
    System.out.println("集合元素为Animal类型");
  }
  public static void main(String[] args){
    //animals可以引用dogs数组
    ArrayList<Dog> dogs = new ArrayList<Dog>(); 
    dogs.add(new Dog());
    ArrayList<? extends Animal> animals = dogs;  
    //当animals引用集合时,集合元素为Dog类型
    animals.get(0).showClass();
    //当dogs引用集合时,集合元素为Dog类型
    dogs.get(0).showClass();
    //无法通过animals对集合进行修改(无法通过编译)
    //animals.add(new Dog());
  }
}
class Dog extends Animal{
  public void showClass(){
    System.out.println("集合元素为Dog类型");
  }
}

集合在多态中的使用

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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# java  # 数组  # 泛型  # 集合  # Java超详细讲解多态的调用  # Java超详细讲解三大特性之一的多态  # Java由浅入深分析多态的概念  # Java全面分析面向对象之多态  # java中的数组初始化赋初值方式  # Java由浅入深学习数组的使用  # Java超细致讲解数组的使用  # Java实例讲解多态数组的使用  # 万用  # 多态  # 可通过  # 为父  # 说什么  # 如何使用  # 过程中  # 实现了  # 情况下  # 引入了  # Animal  # animals  # dogs  # Dog  # void  # private  # public  # System  # strong 


相关文章: 正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  利用JavaScript实现拖拽改变元素大小  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  香港服务器如何优化才能显著提升网站加载速度?  招贴海报怎么做,什么是海报招贴?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  建站之星代理如何获取技术支持?  公司网站制作价格怎么算,公司办个官网需要多少钱?  小程序网站制作需要准备什么资料,如何制作小程序?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  如何通过VPS搭建网站快速盈利?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  红河网站制作公司,红河事业单位身份证如何上传?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  如何快速搭建自助建站会员专属系统?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  如何通过多用户协作模板快速搭建高效企业网站?  如何在Golang中指定模块版本_使用go.mod控制版本号  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  建站之星如何一键生成手机站?  建站之星会员如何解锁更多建站功能?  江苏网站制作公司有哪些,江苏书法考级官方网站?  制作网站怎么制作,*游戏网站怎么搭建?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  海南网站制作公司有哪些,海口网是哪家的?  想学网站制作怎么学,建立一个网站要花费多少?  如何在自有机房高效搭建专业网站?  网站图片在线制作软件,怎么在图片上做链接?  如何获取PHP WAP自助建站系统源码?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  如何确保FTP站点访问权限与数据传输安全?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  如何快速查询网址的建站时间与历史轨迹?  MySQL查询结果复制到新表的方法(更新、插入)  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  Python如何创建带属性的XML节点  如何设置并定期更换建站之星安全管理员密码?  C++中引用和指针有什么区别?(代码说明)  如何选择建站程序?包含哪些必备功能与类型?  如何在IIS7上新建站点并设置安全权限?  广德云建站网站建设方案与建站流程优化指南  Android滚轮选择时间控件使用详解  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  网页设计与网站制作内容,怎样注册网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。