我必须做一个作业(在Java中,使用BlueJ),在这个作业的一部分中,我需要有一个' Move' PlayerShip类中的方法。根据赋值指令,我还需要在Gun类中使用相同的方法,而PlayerShip类中的方法必须两次调用Gun类中的方法。作为参考,我提供了我的Gun类的代码:
public class Gun
{
private int position;
private int power;
private int points;
private boolean justFired;
public Gun(int initialPosition, int initialPower)
{
position = initialPosition;
power = initialPower;
}
public void Move(int distance)
{
position = position + distance;
}
}
这是我的PlayerShip类的代码:
public class PlayerShip
{
private int position;
public PlayerShip()
{
position = Global.promptInt("Player position: ");
Gun gun1 = new Gun(position - 1, 5);
Gun gun2 = new Gun(position + 1, 5);
}
public void Move(int distance)
{
position = position + distance;
Gun.Move(distance);
}
}
现在的问题是,我一直收到错误:
非静态方法Move(Int)不能从静态上下文引用
当我尝试从PlayerShip类中的Move()方法调用Gun类中的Move()方法时。我不知道为什么我收到此错误,因为没有任何变量或方法是静态的,我没有想法所以任何帮助表示赞赏
编辑:标记软件非常严格,如果变量是静态的,则不接受我的代码
答案 0 :(得分:0)
Gun.Move(distance);
是您调用静态方法的方式,Move()
不是。
您希望Gun
的实例调用Move()
方法。
,例如
Gun gun = new Gun();
gun.Move()
答案 1 :(得分:0)
在你的Move方法中,你可以调用Gun.Move。
枪是一个阶级而不是一个对象。因此,您试图在Gun的“蓝图”上调用Move而不是实际的Gun对象。
当您实例化您的PlayerShip类时,您将创建两个Gun实例。如果我认为你希望PlayerShip课程“拥有”两支枪是正确的。您可以为PlayerShip类提供两个私有枪变量,以便移动方法可以访问它们。
public class PlayerShip
{
private int position;
private Gun gun1;
private Gun gun2;
// rest of code
}
然后,您可以访问由您的PlayerShip对象拥有的枪对象。
创建构造函数并移动方法:
public PlayerShip()
{
position = Global.promptInt("Player position: ");
gun1 = new Gun(position - 1, 5);
gun2 = new Gun(position + 1, 5);
}
public void Move(int distance)
{
position = position + distance;
gun1.Move(distance);
gun1.Move(distance);
}
当您尝试在Gun类而不是单个实例上调用方法时,您收到了静态引用错误。
static 关键字表示对象的每个实例都是相同的。
希望这很有用,很难从一开始就了解对象的工作原理。
继续练习!