2013-08-25 2 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»

EDIT 1: Ok я создал класс в одном пакете с Миром .. «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

Почему ваш конструктор является публичным, а не защищенным? –

+0

Что значит «из другого класса»? Любой класс? Какой особый класс вы имеете в виду? – chrylis

ответ

0

Для того, чтобы получить доступ к worldInfo вам придется продлить World но worldName устанавливается в качестве второго параметра World конструктора, это означает, что вы должны знать его в дочернем классе, так ..

0

для функциональность, которую вы хотите, либо изменить ключевое слово protected для публики, либо создать публичную функцию в классе. Это будет выглядеть примерно так:

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

0

Класс abstract, поэтому он не может быть начато. Вы можете читать static переменных из этого класса, но вы не можете создать объект этого класса. Вы можете сделать этот переменный как static, а затем прочитать его или наследовать этот класс и сделать его объектом или сделать его не abstract и сделать его объектом.

Эта переменная постоянна? Сделайте это static.

0

Фактически, protected означает, что он может использоваться дочерними классами, а также любым другим классом в той же упаковке. Так что да, вы можете использовать его для всех классов в том же пакете, даже если они не подклассы абстрактного класса

0

поле можно получить непосредственно, если один из следующих условий:

  • Это другое класс расширяет World (наследственные защищенные поля видны в производных классов, также World не является окончательной и имеет отличный закрытый конструктор)
  • это еще один класс принадлежит к той же упаковке (защищенные поля видимых классы из того же пакета, то же самые как пакет частный).

Поле также может быть доступно посредством отражения от любого другого класса после установки accessible property to true на этом поле (при условии, что разрешен менеджер безопасности).

Смежные вопросы