【问题标题】:How to downcast an array in Java?(Polymorphism)如何在 Java 中向下转换数组?(多态性)
【发布时间】:2020-03-17 07:41:40
【问题描述】:

我目前有一个扩展 Car 类的 Supercar 类,并且想要向下转换 Car 类的数组。

My code:

System.out.println("\nLab Task 6");
Car[] cars = new Car[10]; //object array
cars[0] = new SuperCar( model: "Lambo", cc: 8000, type: "Car", transmission: "Manual", powertrain: "Electric", maxSpeed: 300);
cars[1] = new SuperCar( model: "BMW", cc: 4500, type: "Car", transmission: "Manual", powertrain: "Electric", maxSpeed: 200);
Supercar superD = (SuperCar)cars[];

代码中是否有任何问题或错误?

【问题讨论】:

  • 它编译没有错误吗?
  • 请分享您的代码而不是图片
  • @YCF_L 我是新来的,还在学习发帖的基础知识。

标签: java arrays polymorphism downcast


【解决方案1】:

如果你用自己的类型初始化一个数组:

Car[] cars = new Car[10];

即使 Car 是一个超类,你也不能向下转换 cars 数组。出于这个原因,下面的代码会抛出ClassCastException

SuperCar[] superD = (SuperCar[])cars;

如果你想向下转换 Car 数组,你必须用子类类型初始化这个数组:

Car[] cars = new SuperCar[10];

您可以将此数组向下转换为 SuperCar。

SuperCar[] superD = (SuperCar[])cars;

【讨论】:

    【解决方案2】:

    您不能将对象数组转换为另一个对象。您可以尝试如下操作

         SuperCar d = (SuperCar) car[0];
    

    【讨论】:

      【解决方案3】:

      首先:如果您不包含屏幕截图而是直接粘贴代码并突出显示,那将是有益的。这样,我们可以直接提供与您问题中的代码直接相关的编辑代码。

      您试图实现的一般概念称为扩展,将子类的实例视为其超类的实例,这样做非常好。反向操作将被称为缩小。 但是,就您的代码而言,您不能将一个对象数组转换为另一个对象,您需要输入一个索引以从您的数组中访问汽车,然后将其转换为您的专用类 SuperCar。

      这样的事情应该可以工作:

      SuperCar superD = (SuperCar) cars[0];
      

      尽管您必须考虑如何访问数组中所有不同的汽车。

      【讨论】:

      • 也就是说,如果我想对数组部分进行向下转换,必须一一创建才能访问特定的类?
      • @oscar 我真的不确定您要达到什么目标,因为最初的问题并不清楚。如果你想要整个数组的汽车,你也可以通过SuperCar[] superD = (SuperCar[]) cars; 投射数组
      • 我怎么打电话给SuperCar[] superD = (SuperCar[]) cars;
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 2018-08-07
      • 1970-01-01
      • 2018-01-18
      • 2011-05-01
      • 1970-01-01
      相关资源
      最近更新 更多