如何从抽象类中读取变量?

时间:2013-08-25 10:34:55

标签: java minecraft

从另一个类读取“worldInfo”是否可行?

以下是持有它的类的一部分:

    public abstract class World implements IBlockAccess{
    protected WorldInfo worldInfo;
    //=====Stuff=====
    public World(ISaveHandler par1ISaveHandler, String par2Str, WorldSettings par3WorldSettings, WorldProvider par4WorldProvider, Profiler par5Profiler, ILogAgent par6ILogAgent)
        {
        this.worldInfo.setWorldName(par2Str);
        }
}

我想在我的班级中使用它来获取名称。 “worldInfo.getWorldName”

编辑1: 好吧,我在World的同一个包中创建了一个类。“World_Spy.class”

public class World_Spy extends World{

    public World_Spy(ISaveHandler par1iSaveHandler, String par2Str,
            WorldProvider par3WorldProvider, WorldSettings par4WorldSettings,
            Profiler par5Profiler, ILogAgent par6iLogAgent) {
        super(par1iSaveHandler, par2Str, par3WorldProvider, par4WorldSettings,
                par5Profiler, par6iLogAgent);
    }

    @Override
    protected IChunkProvider createChunkProvider() {
        return null;
    }

    @Override
    public Entity getEntityByID(int i) {
        return null;
    }


    String TheName = "";
    public void gotIt(){
        TheName = this.worldInfo.getWorldName();
        System.out.println(TheName);
    }

}

但是当我从主类叫它时它会崩溃游戏..

World_Spy WName = new World_Spy(null, null, null, null, null, null);

是关于参数吗?

5 个答案:

答案 0 :(得分:0)

要访问worldInfo,您必须延长World,但由于worldName设置为World构造函数的第二个参数,这意味着您必须知道它在你的孩子班,所以..

答案 1 :(得分:0)

对于您想要的功能,可以将关键字protected更改为public,或者在类中创建公共函数。它看起来像这样:

public String getWorldName(){ this.worldInfo.getWorldName(); }

答案 2 :(得分:0)

该类为abstract,因此无法启动。您可以从此类中读取static变量,但不能创建此类的对象。你可以将这个变量作为static,然后你读它或继承这个类并使它成为对象或使它成为非abstract并使它成为对象。

这个变量保持不变?设为static

答案 3 :(得分:0)

实际上,protected表示它可以由子类使用,也可以由同一个包中的任何其他类使用。所以是的,你可以在同一个包中的所有类中使用它,即使它们不是子类化抽象类

答案 4 :(得分:0)

如果满足下列条件之一,则可以直接访问该字段:

  • 另一个类扩展World(继承的受保护字段是 在派生类中可见,World也不是最终的,并且具有非私有构造函数)
  • 另一个类属于同一个包(受保护的字段是 在同一个包中的类中可见,与包私有相同。

在该字段上设置accessible property to true之后,也可以通过任何其他类的反射访问该字段(只要安全管理员允许)。