You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java继承场景下,如何将NonTransferFlight子类对象存入Flight父类数组?

嘿,这个问题其实是Java多态里的基础场景,正常来说父类数组完全可以存放子类对象的——咱们先看正确的写法,再排查你可能踩的坑:

正确的实现示例

首先,先确认父类和子类的定义没问题:

// 父类Flight
class Flight {
    private String flightNum;

    // 父类构造器
    public Flight(String flightNum) {
        this.flightNum = flightNum;
    }

    public void showDetails() {
        System.out.println("Flight number: " + flightNum);
    }
}

// 子类NonTransferFlight,继承自Flight
class NonTransferFlight extends Flight {
    private int flightDuration;

    // 子类构造器必须调用父类构造器
    public NonTransferFlight(String flightNum, int duration) {
        super(flightNum); // 调用父类带参构造器
        this.flightDuration = duration;
    }

    @Override
    public void showDetails() {
        super.showDetails();
        System.out.println("Non-transfer flight, duration: " + flightDuration + " mins");
    }
}

然后是存入数组的代码,完全合法:

public class FlightDemo {
    public static void main(String[] args) {
        // 声明父类类型的数组
        Flight[] flightArray = new Flight[10];

        // 直接将子类对象存入数组,这是Java向上转型的特性
        flightArray[0] = new NonTransferFlight("CA101", 150);
        flightArray[1] = new NonTransferFlight("MU202", 210);

        // 遍历数组调用方法,会触发多态(执行子类的showDetails)
        for (Flight flight : flightArray) {
            if (flight != null) {
                flight.showDetails();
            }
        }
    }
}
你可能踩的坑

你说“存入失败”,大概率不是数组本身的类型问题,而是代码里的其他细节出错了,常见的情况有:

  • 子类构造器未正确调用父类构造器:如果父类没有无参构造器,子类构造器必须显式用super(...)调用父类的带参构造器,否则会编译报错,导致无法创建子类对象。
  • 语法错误:比如创建子类对象时写错了类名,或者赋值时把数组下标搞越界了?
  • 混淆了存入和取出的操作:存入本身没问题,但后续取出对象时如果错误地强制向下转型(比如没做类型检查就强转),可能会抛出ClassCastException,但这不是存入的问题。
如果还是有问题?

如果上面的示例能正常运行,但你的代码依旧报错,可以把具体的错误提示(比如编译错误信息、运行时异常栈)或者你的代码片段贴出来,这样能更快定位具体问题。

内容的提问来源于stack exchange,提问作者Legomert99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 10:02:31