非静态方法

时间:2012-12-03 23:43:11

标签: java non-static

我这里有一个班级,意思是当按下一个键时在一个窗口中移动一把枪。但是,我从类型中引用非静态方法时收到错误。这是两部分。错误来自两个“if(k == .....”行。

private class Keyboard extends KeyAdapter {

    public void keyPressed (KeyEvent e) {

        int k = e.getKeyCode();

        if (k == 39) {Gun.move(10);}
        if (k == 37) {Gun.move(-10);}

    }

}

public class Gun {

        private Color color;
        private int A,B,C,D;
        private int E,F,G,H;

        public Gun (Color c) {

            color = c;
            A = 375;
            B = 550;
            C = 50;
            D = 10;
            E = 395;
            F = 540;
            G = 10;
            H = 10;

        }

        public void move(int xAmount){

            A = A + xAmount;
            E = E + xAmount;

        }

    }

3 个答案:

答案 0 :(得分:4)

哪个Gun?您需要实例,即对由此创建的Gun对象的引用:

Gun gun = new Gun(...);
gun.move(amount);

您的Keyboard对象必须以某种方式引用此Gun对象,或者某个管理器类型的对象,它知道您正在尝试移动Gun

答案 1 :(得分:0)

移动方法非静态方法,因此应使用类Gun的实例调用它。

    Gun gun = new Gun();//creating an instance of a Gun class.            
    if (k == 39) {gun.move(10);}
    if (k == 37) {gun.move(-10);}

答案 2 :(得分:0)

静态方法不是特定于对象的给定实例的方法。它不能使任何一支枪与另一支枪不同(实例变量)。你的移动方法不是静态的。它移动了一把枪。

当你把它称为:

Gun.move(10)

你在所有枪上调用它,而不是在某个枪上(因此关于静态方法的错误)。为了移动枪,你必须有一把你想要移动的枪。因此,您需要创建一个新枪(使用new Gun(...))。