Java Can';无法从带有对象的超类到达字段
我正试图找到一种很好的方法来迭代并打印出ArrayList中的对象 问题是,我似乎无法访问用户输入对象信息(如颜色和品牌)的字段 对象的新实例如下所示: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
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 + " ");
}