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

从子类调用父方法,Java中的封装问题,java,encapsulation,Java,Encapsulation,出于某种原因,我不知道如何编译它。它在此行中找不到setValue函数:“skill.get(“Level”).setValue(newLevel);” import java.util.HashMap; 公共类Stat扩展了GameObject { int值; 公共统计() { name=“准确性”; 数值=1; } public int getValue() { 返回值; } 公共void设置值(int newValue) { 值=新值; } } 导入java.util.HashMap

出于某种原因,我不知道如何编译它。它在此行中找不到setValue函数:“skill.get(“Level”).setValue(newLevel);”

import java.util.HashMap;
公共类Stat扩展了GameObject
{
int值;
公共统计()
{
name=“准确性”;
数值=1;
}
public int getValue()
{   
返回值;
}
公共void设置值(int newValue)
{
值=新值;
}
}
导入java.util.HashMap;
公开课技能扩展属性
{
保护HashMap技能;
公共技能()
{
name=“剑”;
description=“学会掌握剑术”;
技能。放置(“等级”,新属性(“等级”,1));
skill.get(“Level”).setValue(newLevel);
}
}
技能。获取(“等级”)是一个游戏对象,而不是属性

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

如果您确定(例如,如果您使用instanceof进行了检查,或者仅将Stat对象放入技能HashMap中),则可以将get to Stat对象的结果强制转换为Stat对象,如下所示:

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

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

我看不到任何
get(String str)
或put方法,也没有构造函数
Stat(String,int)
可用,很容易混淆。我的游戏对象类的编译版本:
public Class GameObject{String name,description;int number;protected HashMap object;public GameObject(){name=“Stat”;object=new HashMap();}public GameObject get(String hashValue){return object.get(hashValue);}}
我看不到Stat类“Stat”(“Level”,1)的构造函数在给定的代码中。确切地说,这是否意味着我应该进行类型转换?这取决于。你可以进行类型转换,也可以将设置值放入游戏对象中,并在Stat中覆盖它。我可能会这样做,但这取决于游戏对象是什么;)
((Stat)skill.get("Level")).setValue(newLevel);