操作方法的问题 - Java

时间:2011-05-23 22:56:13

标签: java inheritance methods

我正在尝试操作抽象类中的公共方法。 我试图从公共类中扩展其他抽象类的公共方法内部操作该方法,但编译器给了我:

"non-static method method_name() cannot be referenced from a static context"

为了让它运行该方法,我需要什么?

public class Dingo extends Animal
{
    public void act()
    {
      if (kangarooCrossing())
      {
            Weapon.killAnimalMySquare();    //<<<<<<<<<< THE Problematic line
      }

      if(canMove()) 
            move();
      else 
            changeDirection();
    }
    // returns true if a Kangaroo is crossing.
    private boolean kangarooCrossing()
    {
        Actor kangaroo = getOneObjectAtOffset(0, 0, Kangaroo.class);
        if(kangaroo != null) {
            return true;
        }
        else {
            return false;
        }
    }
}

abstract class Weapon  extends Actor
{
    /**Kills an animal that steps on current square*/
     public void killAnimalMySquare()
    {
        Actor animal = getOneObjectAtOffset(0, 0, Animal.class);
        if(animal != null)
            getWorld().removeObject(animal);
    }
    /**returns true if an animal is crossing*/
    public boolean animalCrossing()
    {
         Actor animal = getOneObjectAtOffset(0, 0, Animal.class);
         if(animal != null) 
             return true;
         return false;
    }
}
thnx !!!

3 个答案:

答案 0 :(得分:1)

似乎你调用目标方法的方法是静态的。

您需要创建此类的实例并在实例上调用此方法。

答案 1 :(得分:1)

您在Child类中创建的公共方法不应该是静态方法,以便使用thissuper引用来调用方法。

根据您提交的代码进行编辑:

您无法从类killAnimalMySquare进行方法调用Weapon,如下所示:

Weapon.killAnimalMySquare();

您应该这样称呼它:

killAnimalMySquare();

super.killAnimalMySquare();

this.killAnimalMySquare();
如果将killAnimalMySquare()声明为静态,

Weapon.killAnimalMySquare()将是正确的语法。

答案 2 :(得分:0)

我们需要更多代码来提供更具体的答案,但一般的答案是您尝试从静态方法中调用非静态方法。您需要创建对象的实例,然后使用该对象调用非静态方法。

类似的东西:

MyAbstractClass abstract = new MyDerivedClass();
abstract.my_overridden_method();