我有一个“工具”类和各种子类,如“Ax”或“Hammer”。每种工具(Ax,Hammer)至少有一个在子类中定义的方法。还有一个“工人”类,当时可以为每个工具提供一个工具槽。
工具类:
public abstract class Tool {
private double durability;
public double getDurability() {
return durability;
}
public void setDurability(double durability) {
this.durability = durability;
}
}
Axe课程:
public class Axe extends Tool {
public void chop() {
//chop some wood
}
}
现在为工人设置一个工具:
Tool tool = new Axe();
问题在于,当我称之为“斧头”时。我得到getDurability()和setDurability()但不是chop()。
答案 0 :(得分:4)
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
}
}
答案 1 :(得分:1)
如果您想致电chop
,您需要知道自己有Axe
(不只是任何旧的Tool
)。
然后你可以进行类型转换:
Axe axe = (Axe) tool;
axe.chop();
如果您不确定这是否真的是Axe
,您可以先检查(但这有点像设计气味):
if (tool instanceof Axe){
Axe axe = (Axe) tool;
axe.chop();
}
答案 2 :(得分:0)
你必须在施放到Ax之后调用
((Axe)tool).chop();
但是你必须在转换之前检查它以避免任何异常
if (tool instanceof Axe) {
((Axe)tool).chop();
}