调用在另一个类中创建的对象的方法

时间:2017-03-30 08:21:49

标签: java object reference

我有点问题。

我有3个班级的外观"喜欢"这样:

public class Gun{
    public void Shot(){
        // shoot code
    }

    public void RenderGun()
    {
        // render code
    }

    // more methods
}


public class GameManager
{
    Gun gun;

    public GameManager()
    {
        gun = new Gun();
    }

    // methods using GunClass methods.
}

public class HudScreen
{
    Gun gun;

    public HudScreen()
    {
        gun = new Gun();
    }

    public void GunShotButton()
    {
        gun.Shoot();
    }
}

问题是我有两个Gun对象,我希望有一个,但在HudScreen和GameManager这两个类中使用它。

所以,如果我在GameManager中创建一个新的Gun对象,如何" call"这个对象来自HudScreen类?

谢谢,MM。

3 个答案:

答案 0 :(得分:1)

以这种方式更改构造函数:

public GameManager(Gun gun) {
   this.gun = gun;
}

HudScreen类相同。 然后在一些主类:

class Main {    
   public static void main(String[] args) {
      Gun gun = new Gun();
      HudScreen hudScreen = new HudScreen(gun);
      GameManager gameManager = new GameManager(gun)
   }
}

当前main方法被认为是进行初始化的顶级方法。这可能是一些其他方法,其中创建了GunGunManagerHudScreen的对象。

答案 1 :(得分:1)

GameManager构造函数

 public GameManager(Gun gun){ 
     this.gun = gun;
 }

HudScreen构造函数

public HudScreen(Gun gun){
      this.gun = gun;
 }

从创建Gun对象的main方法中,您可以将其传递给GameManager和HudScreen的构造函数

 public static void main() {
      Gun gun = new Gun();
      HudScreen hudScreen = new HudScreen(gun);
      GameManager gameManager = new GameManager(gun)
   }

如果您不想以相同的方法创建GameManager和HudScreen,但仍想使用相同的Gun对象,那么您可以这样做 1.初始化Gun对象 2.在GameManager和Hudscreen上你可以在构造函数上传递它,也可以直接将它传递给这些类中的方法。 例如假设你想让GameManager构造函数接收新创建的Gun并将相同的枪传递给Hudscreen.GunShotButton。我希望你在这里得到一个线索 -

public class Gun{
    public void Shot(){
        // shoot code
    }

    public void RenderGun()
    {
        // render code
    }

    // more methods
}


public class GameManager
{
    Gun gun;

    public GameManager(Gun gun)
    {
        this.gun =gun;
    }

    // methods using GunClass methods.
}

public class HudScreen
{   
    public HudScreen()
    {
    }

    public void GunShotButton(Gun gun)
    {
        gun.Shoot();
    }
}

答案 2 :(得分:-1)

将ScreenController注册到每个NiftyGUI屏幕。通过创建实现de.lessvoid.nifty.screen.ScreenController接口及其抽象方法的Java类来创建ScreenController。