如何从另一个类的方法更新变量

时间:2014-04-29 15:48:13

标签: java variables coordinates

好的,我需要从一个类的方法中获取变量,并在另一个类中更新它。

更新方法的类。

public abstract class MovableObject{
    protected int speed;
    protected int heading;

    public void move(){
        setX(finalX);
        setY(finalY);
    }

需要更新的课程:

public class Car extends MoveableObject{
    private int height;
    private int width;

    public Car(){
        super.setX(200);
        super.setY(2);
    }

我有一个迭代器,它通过一个列表并检查X和Y坐标,目前它不断打印出来(200,2),但汽车正在移动。因此MovableObject类具有更新的坐标,但是因为我从Car调用它,所以它没有得到正确的坐标到移动的汽车。我需要将变量从move()传递给多个类,这应该是相同的,因为Iterator会处理正确更新的内容,或者这种方式非常复杂?

listObject = new GameObjectCollection();
car = new Car();
listObject.add(car);

System.out.println("CAR: " + ((Car)gameObj).getX() + " " + ((Car)gameObj).getY());

2 个答案:

答案 0 :(得分:2)

Car类的构造函数初始化这些值,因此如果您创建Car,它将默认具有这些值。

解决方案1:创建另一个构造函数

public class Car extends MoveableObject{
    private int height;
    private int width;

    public Car(){
        super.setX(200);
        super.setY(2);
    }

    public Car(int x, int y){
       super.setX(x);
       super.setY(y);
    } 

}

如果使用第二个构造函数,则可以为Car的实例定义所需的值。

Car c = new Car(100, 3);

确实如此:

 public Car(int x, int y){
           super(); //Call the creation of the superclass
           super.setX(x); //Modify superclass X and Y values.
           super.setY(y);
        } 

解决方案2:使用getter和setter方法(提供它们是可访问的,它们是Class或Superclasses)

创建Car后,您可以更改xy值,然后再将其添加到列表中。

Car c = new Car();
c.setX(100);
c.setY(3);

答案 1 :(得分:1)

你想在你的类中构建一个get方法(通常你也想要一个set方法,用于你希望外部世界能够改变的任何东西)。

类似的东西:

 public int getx(){
      return this.x;  // where x is the variable you are returning
 }

因为这是公开的,其他类可以访问它。如果您将变量保密,那么除了您定义的公共方法外,任何外部来源都无法访问或更新它们。

同样,如果您希望外部资源能够更新它,那么您可以定义一个setter方法:

 public void setx(int input){
      this.x = input;
 }

如果x是私有的,那么外部源只能通过此方法(或您为该类定义的其他方法)修改它。

使用这些方法,您可以执行以下操作:

 SomeClass example = new SomeClass();
 example.setx(10);  // sets example's x variable to 10
 System.out.println(example.getx());  // will print 10