首页 > 解决方案 > 具有来自子类的 2 个构造函数的 Arraylist

问题描述

我正在尝试使用 Java 创建一个简单的 GUI。我有一个像这样执行的 Arraylist:

private List<Vehicle> vehicles = new Arraylist<>();

我试图传递一个比超类具有更多参数的子类对象。

我试过铸造它并覆盖 toString 方法,但似乎没有任何效果

我的超班:

public abstract class Vehicle {
    private int speed; 
    public Vehicle (int speed) {
        this.speed = speed;
    }
}

我的子类:

public class Car extends Vehicle {
    private int gear; 
    public Car (int speed, int gear) {
        super(speed);
        this.gear = gear;
    }
}

public class Bike extends Vehicle {
    public Bike (int speed) {
        super(speed);
    }
}

我在初始化 Arraylist 的类中实例化

Car car = new Car (100, 5);
vehicles.add(car);

我可以毫无问题地初始化汽车。参数被发送,但我得到的结果只是超类的一个实例。我哪里错了?

标签: javaarraylistsubclass

解决方案


它是java 泛型的一个众所周知的方面,List<Car>不是List<Vehicle>. 这就是为什么有诸如List<? extends Vehicle>and之类的结构List<? super Car>。有许多在线资源展示了如何处理您的情况。例如泛型、继承和子类型


推荐阅读