从子类调用父方法,Java中的封装问题

时间:2013-07-24 04:44:20

标签: java encapsulation

出于某种原因,我无法弄清楚如何编译它。它在这一行找不到setValue函数:'skill.get(“Level”)。setValue(newLevel);'

import java.util.HashMap;

public class Stat extends GameObject
{
    int value;

    public Stat()
    {
        name = "Accuracy";
        value = 1;
    }

    public int getValue()
    {   
        return value;
}

    public void setValue(int newValue)
    {
        value = newValue;
    }
}


import java.util.HashMap; 

public class Skill extends Stat
{
    protected HashMap<String, GameObject> skill;

    public Skill()
    {
        name = "swords";
        description = "Learn how to master the art of swordmanship";
        skill.put("Level",new Stat("Level",1));
        skill.get("Level").setValue(newLevel);
    }
}

1 个答案:

答案 0 :(得分:1)

skill.get(“Level”)是一个GameObject,而不是Stat。

可能setValue只在Stat中定义,而不是GameObject?

如果您确定(例如,如果您使用instanceof进行检查或仅将Stat对象放入skill-HashMap中),您可以将get的结果转换为Stat对象,如下所示:

((Stat)skill.get("Level")).setValue(newLevel);

编辑:可能只是一个复制粘贴问题:你需要一个构造函数Stat(String,int)(感谢Subhrajyoti Majumder指出它)