2013-08-25 155 views
0

是否可以从另一个班级阅读“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_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); 

是关于参数吗?

+1

为什么你的构造函数是public而不是protected? –

+0

你是什么意思“来自另一个班级”?任何课程?你有什么特别的课程? – chrylis

回答

0

为了访问worldInfo你将不得不延长WorldworldName设置为World构造函数的第二个参数,这意味着你必须知道在你的子类,所以..

0

对于您想要的功能,或者将关键字protected更改为public,或者在该类中创建一个公共函数。这将是这个样子:

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

0

类是abstract,所以它不能被启动。你可以从这个类读取static变量,但是你不能创建这个类的对象。你可以将这个变体作为static,然后你读它或者继承这个类并且使它成为它的对象,或者使它成为非对象并且使它成为它的对象。

这个变量保持不变?做它static

0

实际上,protected表示它可以被子类使用,也可以被同一个包中的任何其他类使用。所以,是的,你可以在各个阶层在同一个包使用它,即使他们不继承抽象类

0

领域可以直接访问,如果下列条件之一为真:

  • 另一类扩展World(继承保护字段在派生类 可见,也World不是终点,并且具有非私有构造函数)
  • 即另一个类属于相同包(被保护的字段是类 可见从同一封装,同作为包私人)。

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