簡體   English   中英

如何從抽象類中讀取變量?

[英]How to read a variable from an abstract class?

是否可以從另一個類中讀取“ 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);

關於參數嗎?

為了訪問worldInfo您必須擴展World但是將worldName設置為World構造函數的第二個參數,這意味着您必須在子類中知道它,所以..

對於所需的功能,可以將關鍵字protected更改為public,或者在類中創建public函數。 它看起來像這樣:

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

該類是abstract ,因此無法啟動。 您可以從此類讀取static變量,但不能創建此類的對象。 您可以將此可變變量設為static ,然后讀取它或繼承該類並使其成為對象,或使其非abstract並使其成為對象。

這個變量保持不變嗎? 使其static

實際上, 保護意味着它可以由子類使用,也可以由同一包中的任何其他類使用。 所以是的,即使它們沒有繼承抽象類,您也可以在同一包中的所有類中使用它

如果滿足以下條件之一,則可以直接訪問該字段:

  • 另一個類擴展了World (繼承的受保護字段在派生類中可見, World也不是最終的,並且具有非私有構造函數)
  • 另一個類屬於同一程序包(受保護的字段在同一程序包的類中可見,與程序包私有相同)。

在該字段上將accessible屬性設置為true之后(只要安全管理器允許),還可以通過從任何其他類進行反射來訪問該字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM