2013-08-25 106 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(只要安全管理器允許)後,還可以通過來自任何其他類的反射來訪問此字段。