我正在尝试操作抽象类中的公共方法。 我试图从公共类中扩展其他抽象类的公共方法内部操作该方法,但编译器给了我:
"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 !!!
答案 0 :(得分:1)
似乎你调用目标方法的方法是静态的。
您需要创建此类的实例并在实例上调用此方法。
答案 1 :(得分:1)
您在Child类中创建的公共方法不应该是静态方法,以便使用this
或super
引用来调用方法。
您无法从类killAnimalMySquare
进行方法调用Weapon
,如下所示:
Weapon.killAnimalMySquare();
您应该这样称呼它:
killAnimalMySquare();
或
super.killAnimalMySquare();
或
this.killAnimalMySquare();
如果将killAnimalMySquare()声明为静态, Weapon.killAnimalMySquare()
将是正确的语法。
答案 2 :(得分:0)
我们需要更多代码来提供更具体的答案,但一般的答案是您尝试从静态方法中调用非静态方法。您需要创建对象的实例,然后使用该对象调用非静态方法。
类似的东西:
MyAbstractClass abstract = new MyDerivedClass();
abstract.my_overridden_method();