Java Can';无法从带有对象的超类到达字段

Java Can';无法从带有对象的超类到达字段,java,oop,object,iteration,superclass,Java,Oop,Object,Iteration,Superclass,我正试图找到一种很好的方法来迭代并打印出ArrayList中的对象 问题是,我似乎无法访问用户输入对象信息(如颜色和品牌)的字段 对象的新实例如下所示: Vehicle C = new Car(4, "Blue", "Honda"); 汽车(以及自行车、公共汽车等其他类别)是车辆的子类 车辆类别: public class Vehicle { public int pass = 0; public int cost = 0; public int size = 0; public Strin

我正试图找到一种很好的方法来迭代并打印出ArrayList中的对象

问题是,我似乎无法访问用户输入对象信息(如颜色和品牌)的字段

对象的新实例如下所示:

Vehicle C = new Car(4, "Blue", "Honda");
汽车(以及自行车、公共汽车等其他类别)是车辆的子类

车辆类别:

public class Vehicle {

public int pass = 0;
public int cost = 0;
public int size = 0;
public String brand = "";
public String color = "";

public Vehicle(){}
}

汽车等级:

public class Car extends Vehicle{

// constructor
public Car(int passengers, String col, String brandOfVehicle){
    if (passengers < 0 || passengers > 4){
        throw new IllegalArgumentException();
    }else
        pass = passengers;
        cost += pass*15 + 100;
        size = 5;
        color = col;
        brand = brandOfVehicle;
}
公共级轿车扩展车辆{
//建造师
公共汽车(内部乘客、串列col、串列车辆品牌){
如果(乘客<0 | |乘客>4){
抛出新的IllegalArgumentException();
}否则
通行证=乘客;
成本+=合格*15+100;
尺寸=5;
颜色=颜色;
品牌=汽车品牌;
}
} 尝试迭代对象时:

        Iterator<Object> it = Ferry.iterator();
    while(it.hasNext()){
        Object i = it.next();
        System.out.println(i + " ");
    }
Iterator it=Ferry.Iterator();
while(it.hasNext()){
objecti=it.next();
System.out.println(i+“”);
}
在迭代对象时,我希望达到I.color中的颜色和品牌字符串。但我猜,因为我是一个新对象,它可能无法访问与Car、Bus等相关的字段和方法


有没有办法绕过这个问题?或者这不是真正的问题

将对象强制转换为vihecle,它将工作:

Iterator<Object> it = Ferry.iterator();
while(it.hasNext()){
    Vehicle i = (Vehicle)it.next();
    System.out.println(i + " ");
}

我不知道
Ferry
的类型是什么,但可能
Ferry.iterator()
应该返回
iterator
而不是
iterator

然后
it.next()
将返回对
车辆的引用,这将允许您访问
车辆的所有公共成员

Iterator<Vehicle> it = Ferry.iterator();
while(it.hasNext()){
    Vehicle i = it.next();
    System.out.println(i.color);
}

将您的
Ferry
重新声明到类型
列表中

然后你可以像这样使用它

Iterator<Vehicle> it = Ferry.iterator();
while(it.hasNext()){
    Vehicle i = it.next();
    System.out.println(i + " ");
}
Iterator it=Ferry.Iterator();
while(it.hasNext()){
车辆i=it.next();
System.out.println(i+“”);
}
或者更简单:

List<Vehicle> ferry = ...;
while(Vehicle v: ferry)){
    System.out.println(v + " ");
}
List ferry=。。。;
而(车辆v:渡轮){
System.out.println(v+“”);
}
注意,为了更好地阅读代码,Java中的变量名应该小写。

Iterator it=Ferry.Iterator();
    Iterator<Vehicle > it = Ferry.iterator();
while(it.hasNext()){
    Vehicle i = it.next();
    System.out.println(i + " ");
}
while(it.hasNext()){ 车辆i=it.next(); System.out.println(i+“”); }

您无法访问属性,因为您强制转换到类型对象,该对象是车辆的超类

可能值得注意的是,我的所有对象都被放入一个名为Ferryreally的ArrayList中,真希望我能投票,所有这些答案都很棒!非常感谢。
List<Vehicle> ferry = ...;
while(Vehicle v: ferry)){
    System.out.println(v + " ");
}
    Iterator<Vehicle > it = Ferry.iterator();
while(it.hasNext()){
    Vehicle i = it.next();
    System.out.println(i + " ");
}