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

Java中能否创建存储Route及其子类实例的ArrayList及实现方法

可行性结论

完全可行。Java的多态机制天然支持父类类型的集合存储自身实例及所有子类实例,IndirectRoute作为Route的子类,其实例可以向上转型为Route类型,因此可以和普通Route实例存入同一个泛型声明为Route的ArrayList中。

前置修复

你给出的代码存在两处编译错误,需先修复才能运行:

  • Route类中的finalize()方法缺少闭合的右花括号,方法未正常结束
  • Route类的成员变量均为private修饰,toString()方法中调用的getId()、getAeroplane()、getDeparture()、getArrival()、getTickets()方法未在代码中定义,需要补充对应getter方法,否则编译不通过。

另外不建议重写finalize()方法实现控制台输入初始化逻辑:finalize()是JVM垃圾回收时调用的protected回调方法,不适合承载业务逻辑,建议将这部分输入逻辑抽成普通的成员方法使用。

具体实现步骤
  1. 声明泛型为Route的ArrayList集合,注意不要声明成IndirectRoute泛型,否则无法存入父类Route的实例
  2. 分别创建3个行程实例:d1、d3为无经停的Route对象,d2为带经停的IndirectRoute对象
  3. 调用集合的add()方法依次将三个实例加入集合即可
  4. 遍历集合时,如果需要访问IndirectRoute特有的经停站属性,先通过instanceof判断元素实际类型,再向下转型为IndirectRoute调用对应方法即可。

main方法参考实现

import java.util.ArrayList;

public class RouteTest {
    public static void main(String[] args) {
        // 初始化存储行程的集合
        ArrayList<Route> routes = new ArrayList<>();

        // 构造3个行程实例,参数可根据实际业务替换
        Route d1 = new Route(1001, 737, "北京首都", "上海虹桥", new ArrayList<>());
        IndirectRoute d2 = new IndirectRoute("武汉天河", 2003, 320, "北京大兴", "广州白云", new ArrayList<>());
        Route d3 = new Route(1005, 787, "深圳宝安", "成都天府", new ArrayList<>());

        // 全部加入同一个集合
        routes.add(d1);
        routes.add(d2);
        routes.add(d3);

        // 遍历验证
        for (Route route : routes) {
            // 直接调用toString()会自动匹配对象实际类型的重写逻辑
            System.out.println(route);
            // 处理带经停的行程特有属性
            if (route instanceof IndirectRoute) {
                IndirectRoute temp = (IndirectRoute) route;
                System.out.println("经停站:" + temp.getMiddlestop());
            }
        }
    }
}
注意事项
  • 存入集合的子类实例会被自动向上转型为Route类型,直接调用Route类中定义过、且被子类重写的方法(比如toString())时,会自动执行子类的重写版本,不需要额外处理
  • 不要使用无泛型声明的原始类型ArrayList存储对象,虽然也能实现存储需求,但会丢失编译期类型检查,容易引发运行时类型转换异常。

内容的提问来源于stack exchange,提问作者Δήμητρα Γενναίου

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:54:26