我试图找到一种很好的方法来迭代并打印出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;
}
}尝试迭代对象时:
Iterator<Object> it = Ferry.iterator();
while(it.hasNext()){
Object i = it.next();
System.out.println(i + " ");
}
当迭代对象时,我希望达到I.color中的颜色和品牌字符串。但是我猜想,由于我是一个新的对象,它可能无法访问与汽车、公共汽车等相关的字段和方法?
有什么办法绕过这个问题吗?或者这可能不是真正的问题?
Iterator<Vehicle > it = Ferry.iterator();
while(it.hasNext()){
Vehicle i = it.next();
System.out.println(i + " ");
}
您无法访问属性,因为您强制转换为Object类型,这是您的车辆的超类。
将对象投射到vihelle并使其工作:
Iterator<Object> it = Ferry.iterator();
while(it.hasNext()){
Vehicle i = (Vehicle)it.next();
System.out.println(i + " ");
}
您还可以检查是否有来自车辆的子类,然后进行转换。
或者,如果只有车辆可以访问渡轮,您可以将列表更改为:
Iterator<Vehicle> it = Ferry.iterator();
while(it.hasNext()){
Vehicle i = it.next();
System.out.println(i + " ");
}
我不知道Ferry
的类型是什么,但也许Ferry.iterator()
应该返回一个迭代器
然后<代码>它。next()
将返回对车辆的引用,这将允许您访问车辆的所有公共成员。
Iterator<Vehicle> it = Ferry.iterator();
while(it.hasNext()){
Vehicle i = it.next();
System.out.println(i.color);
}
如果渡轮可以包含非车辆的物体,则必须使用铸造:
Iterator<Object> it = Ferry.iterator();
while(it.hasNext()){
Object i = it.next();
if (i instanceof Vehicle)
System.out.println(((Vehicle)i).color);
}
我是java初学者,我不理解这行代码是什么意思 平均值。为什么不能访问自己的方法。请详细解释如果类A正在实例化,那么为什么它的方法不可访问。
我正在努力解决一个奇怪的问题。 控制台是 如您所见,第一行输出了GeneratorField对象的名称,但是为什么第二个命令失败了? 我正在使用Freemarker 2.3.20 谢啦
问题内容: 众所周知,私有字段不会在类之间继承。令我着迷的是它如何用于内部静态类。考虑以下代码: 您能否解释一下如何访问其他内部类的私有字段?如果合法,为什么只能通过“ super.XXX”构造实现? 问题答案: 内部类是Java的较晚入门。添加它们时,它们仅作为编译器扩展添加,对JVM不变。 语言规范指出,内部类被允许访问在其内声明的类的私有成员。包括其他内部类。 为了使其工作,编译器会生成桥接
在我的项目中,我使用XStream序列化/反序列化我的实体。 在应用程序中,所有的事情都很好,但当我尝试创建一些单元测试时就不行了。 我有一个抽象类,它有一个字段和公共访问器。我有一个类扩展了。 我的XStream配置如下所示: 当我运行我的应用程序时,没有任何问题。但当我尝试创建单元测试时,XStream引发异常: Edit 我在测试中尝试了,它引发了同样的异常。但当我尝试时,没有问题。我知道这
我不确定我是不是漏了一步。 我有一个s3 bucket,我需要能够从一个AWS SDK PHP脚本访问我写的运行在我的EC2上。我创建了一个IAM角色以允许访问。 IAM Allow_S3_Access_to_EC2 我的Bucket策略中没有任何关于我的EC2甚至我附加的IAM角色的内容。我也需要在我的桶策略中添加一些东西吗?这就是我困惑的地方。 我所经历的是,当一个新的对象被创建,我试图从我的
问题内容: 我有一个扩展其超类的子类的对象。子类中有一个重写的方法,可以使用对象调用该方法。可以使用子类对象调用超类的函数吗? 考虑上面的代码。 它在这里打印 子类去 。相反,我必须打印 超类去 。 问题答案: 不,这是不可能的,如果您认为需要,请重新考虑您的设计。覆盖方法的全部要点是替换其功能。如果一个不同的类对该类的内部工作非常了解,那么您将完全取消封装。