Java Access主类变量

时间:2012-05-03 06:04:48

标签: java scope

我正在制作一个小型游戏,其中Main类包含所有对象和变量,并在类本身内调用方法来完成大部分工作。很标准。不幸的是,这意味着我需要的许多变量都在Main类中,我无法访问它们。

例如,作为测试,我想让一个球在屏幕上反弹,这很简单,但我需要屏幕的尺寸,我可以使用主类中的getSize()方法轻松获得。但是当我创建将会反弹的Ball类时,我无法访问getSize()方法,因为它位于Main类中。无论如何要打电话吗?

我知道我可以将变量传递给构造函数中的Ball类或我需要的每个方法,但是我想知道是否有某些方法可以在需要时使用我需要的任何变量,而不是每当我创建一个新对象时都将所有信息传递给它。

Main.class

public void Main extends JApplet {
    public int width = getSize().width;
    public int height = getSize().height;

    public void init(){
        Ball ball = new Ball();
    }
}

Ball.class

public void Ball {
    int screenWidth;
    int screenHeight;

    public Ball(){
        //Something to get variables from main class
    }
}

3 个答案:

答案 0 :(得分:2)

将您需要的变量传递给对象。您甚至可以创建一个包含类所需的所有常量/配置的单例类。

给出的例子:

常量类

public class Constants {
    private static Constants instance;

    private int width;
    private int height;

    private Constants() {
        //initialize data,set some parameters...
    }

    public static Constants getInstance() {
        if (instance == null) {
            instance = new Constants();
        }
        return instance;
    }

    //getters and setters for widht and height...
}

主要课程

public class Main extends JApplet {
    public int width = getSize().width;
    public int height = getSize().height;

    public void init(){
        Constants.getInstance().setWidth(width);
        Constants.getInstance().setHeight(height);
        Ball ball = new Ball();
    }
}

球类

public class Ball {
    int screenWidth;
    int screenHeight;

    public Ball(){
        this.screenWidth = Constants.getInstance().getWidth();
        this.screenHeight= Constants.getInstance().getHeight();
    }
}

另一种方法是使用您需要的参数启动对象实例。给出的例子:

主要课程

public class Main extends JApplet {
    public int width = getSize().width;
    public int height = getSize().height;

    public void init(){
        Ball ball = new Ball(width, height);
    }
}

球类

public class Ball {
    int screenWidth;
    int screenHeight;

    public Ball(int width, int height){
        this.screenWidth = width;
        this.screenHeight= height;
    }
}

有更多方法可以实现这一目标,只需自己选择并选择您认为对您的项目更好的那个。

答案 1 :(得分:1)

您只需使用两个arg构造函数即可访问它们。

public void init(){
        Ball ball = new Ball(width,height);
    }

public Ball(width,height){
        //access variables here from main class
    }

答案 2 :(得分:0)

为什么不这样:

public void Main extends JApplet {
public int width = getSize().width;
public int height = getSize().height;

public void init(){
    Ball ball = new Ball(width, height);
}


public void Ball {

public Ball(int screenWidth, int screenHeight){
    //use the variables
}