我有一个类“工具”和各种子类,如“斧头”和“锤子”。每种工具(Axe,Hammer)至少有一个在子类中定义的方法。还有一个“工人”类,它在同一时间为一个工具设置了一个槽,它可以是每一个工具。
工具类:
public abstract class Tool {
private double durability;
public double getDurability() {
return durability;
}
public void setDurability(double durability) {
this.durability = durability;
}
}斧头类:
public class Axe extends Tool {
public void chop() {
//chop some wood
}
}现在要为工作人员设置一个工具:
Tool tool = new Axe();问题是当我叫“斧头”时。我得到了getDurability()和setDurability(),但没有chop()。
发布于 2014-04-12 06:47:47
你得在投完斧头后再打电话
((Axe)tool).chop();但是您必须在转换之前检查它,以避免任何异常。
if (tool instanceof Axe) {
((Axe)tool).chop();
}发布于 2014-04-12 06:48:50
abstract class Tool {
private double durability;
public double getDurability() {
return durability;
}
public void setDurability(double durability) {
this.durability = durability;
}
public void work(){
}
}
class Axe extends Tool {
@Override
public void work() {
this.chop();
}
public void chop() {
//chop some wood
}
}发布于 2014-04-12 06:48:16
如果您想要调用chop,您需要知道您有一个Axe (而不是任何旧的Tool)。然后你就可以输入:
Axe axe = (Axe) tool;
axe.chop();如果您不确定这是否真的是一个Axe,您可以先检查(但这有点设计气味):
if (tool instanceof Axe){
Axe axe = (Axe) tool;
axe.chop();
}https://stackoverflow.com/questions/23027119
复制相似问题