在Java中的另一个类中调用特定实例的方法

时间:2013-12-01 23:43:35

标签: java methods instance method-call

最初,这是从静态上下文错误调用的非静态方法开始的。我已经意识到我不能引用类本身,而是该类的特定实例。但是,在给我的初始化对象一个特定的名称后,我发现java不会确认这个特定的实例,而是将其称为未知变量。在尝试编译代码时,我收到错误“找不到符号 - 变量播放器”。我相信代码不会将类的特定实例识别为已声明的变量。

这是正在初始化的类

Link player = new Link(); 
addObject(player, 300, 176);

以下是尝试引用此特定实例的方法的方法:

int linkX = player.getX();

代码的第二位是属于ChuChu名称的类的方法。 ChuChu和Link是同一个超类的子类。任何帮助将不胜感激!

世界级:

  public Link player;

/**
 * Constructor for objects of class ThroneRoom.
 * 
 */
public ThroneRoom()
{    
    // Create a new world with 600x562 cells with a cell size of 1x1 pixels.
    super(600, 562, 1);
    this.player = new Link(); 
    prepare();
}

/**
 * Prepare the world for the start of the program. That is: create the initial
 * objects and add them to the world.
 */
public void prepare() //R1
{
    addObject(player, 300, 176);
    addObject(new ChuChu(), 45, 267);
    addObject (new ChuChu(), 558, 267);
    addObject ( new ChuChu(), 45, 373);

}

ChuChu的完整方法

/**
 * Crawl Toward - Makes ChuChus crawl toward Link
*/
public void crawlToward ()
{
    int random = (int) Math.random() * 5;
    int linkX = player.getX();
    int linkY = player.getY();
    if(getX() >linkX)
    {
        setLocation(getX() - random, getY());
    }
    else
    {
        setLocation(getX()+random, getY());
    }

    if(getX() > linkY )
    {
        setLocation(getX(), getY()-random);
    }
    else
    {
        setLocation(getX(), getY()+random);
    }

}

我使用的是名为Greenfoot的IDE。我的问题似乎是我给了两个班,世界和演员,他们不能互相继承。从World类中,我将对象实例化为视觉世界,而在Actor中我创建了对象及其方法。

1 个答案:

答案 0 :(得分:0)

基于你的澄清评论,这可能有所帮助,Java是块作用域,所以这样的东西不起作用:

if(true) {
  Link player = new Link(); 
}
//player is outside of the block it was declared in
int linkX = player.getX();

在你的情况下,你需要在player之外声明private void prepare()(在这种情况下,在类级别最有意义)。你可以自由地在一个块(或你的情况下的方法)中实例化它。这是与您的班级一起快速尝试:

public class World
{
  Link player;

  public ThroneRoom()
  {    
    // Create a new world with 600x562 cells with a cell size of 1x1 pixels.
    super(600, 562, 1); 

    prepare();
  }

  /**
   * Prepare the world for the start of the program. That is: create the initial
   * objects and add them to the world.
   */
  private void prepare()
  {
    this.player = new Link();
    addObject(player, 300, 176);
    addObject(new ChuChu(), 45, 267);
    addObject (new ChuChu(), 558, 267);
    addObject ( new ChuChu(), 45, 373);

  }
  public void crawlToward ()
  {
    int random = (int) Math.random() * 5;
    int linkX = this.player.getX();
    int linkY = this.player.getY();
    if(getX() >linkX)
    {
      setLocation(getX() - random, getY());
    }
    else
    {
      setLocation(getX()+random, getY());
    }

    if(getX() > linkY )
    {
      setLocation(getX(), getY()-random);
    }
    else
    {
      setLocation(getX(), getY()+random);
    }
  }
}