如果我创建一个接口(interface):wood
,它由许多对象实现,例如 oak
和 pine
。
当我创建这个时:
Pine tree = new Pine();
Oak trunk = new Oak();
ArrayList<wood> woods = ArrayList<wood>();
woods.add(tree);
woods.add(trunk);
并这样使用它:
for(wood tree: woods){
if(tree.gettype() == PINE)
tree.getbranch();
else if(tree.gettype() == OAK)
tree.gettrunk();
}
树对象是否使用 Oak 或 Pine 对象中的方法?
根据测试,我认为它将使用相应的对象,但我只是想确定一下。
最佳答案
每当您将某些内容向上转换为其接口(interface)类型时,您只能使用该接口(interface)定义的方法。
也就是说,您不能使用 Oak
和 Pine
定义的任何更专门的方法。您只能使用 wood
定义的任何内容。
因此,如果您想使用 Oak
和 Pine
定义的方法,您需要将它们的对象向下转换为适当的类类型。
这个:
for(wood tree: woods){
if(tree.gettype() == PINE)
tree.getbranch();
else if(tree.gettype() == OAK)
tree.gettrunk();
}
应替换为:
for(wood tree : woods){
if(wood.getClass().getName().equals("Pine")){
// chop that tree ! destroy nature !
}else if(wood.getClass().getName().equals("Oak")){
// more deforestation !
}
}
关于java - 添加到 ArrayList 时是否会转换对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19468403/