首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从超类调用子类的方法

从超类调用子类的方法
EN

Stack Overflow用户
提问于 2014-04-12 06:44:50
回答 3查看 72关注 0票数 0

我有一个类“工具”和各种子类,如“斧头”和“锤子”。每种工具(Axe,Hammer)至少有一个在子类中定义的方法。还有一个“工人”类,它在同一时间为一个工具设置了一个槽,它可以是每一个工具。

工具类:

代码语言:javascript
复制
public abstract class Tool {

    private double durability;

    public double getDurability() {
        return durability;
    }

    public void setDurability(double durability) {
        this.durability = durability;
    }
}

斧头类:

代码语言:javascript
复制
public class Axe extends Tool {

    public void chop() {
        //chop some wood
    }
}

现在要为工作人员设置一个工具:

代码语言:javascript
复制
Tool tool = new Axe();

问题是当我叫“斧头”时。我得到了getDurability()和setDurability(),但没有chop()。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-12 06:47:47

你得在投完斧头后再打电话

代码语言:javascript
复制
((Axe)tool).chop();

但是您必须在转换之前检查它,以避免任何异常。

代码语言:javascript
复制
if (tool instanceof Axe) { 
    ((Axe)tool).chop(); 
}
票数 0
EN

Stack Overflow用户

发布于 2014-04-12 06:48:50

代码语言:javascript
复制
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
        }
    }
票数 4
EN

Stack Overflow用户

发布于 2014-04-12 06:48:16

如果您想要调用chop,您需要知道您有一个Axe (而不是任何旧的Tool)。然后你就可以输入:

代码语言:javascript
复制
Axe axe = (Axe) tool;
axe.chop();

如果您不确定这是否真的是一个Axe,您可以先检查(但这有点设计气味):

代码语言:javascript
复制
if (tool instanceof Axe){
  Axe axe = (Axe) tool;
  axe.chop();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23027119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档