从超类调用子类的方法

时间:2014-04-12 06:44:50

标签: java

我有一个“工具”类和各种子类,如“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()。

3 个答案:

答案 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(); 
}