好的,我需要从一个类的方法中获取变量,并在另一个类中更新它。
更新方法的类。
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());
答案 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
后,您可以更改x
和y
值,然后再将其添加到列表中。
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