проблема при работе с методом - Java - PullRequest
0 голосов
/ 24 мая 2011

Я пытаюсь использовать публичный метод в абстрактном классе.Я пытался использовать этот метод из открытого метода, который находится внутри открытого класса, который расширяет другой абстрактный класс, но компилятор дал мне:

"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 ]

1 голос
/ 24 мая 2011

Открытый метод, который вы создаете в дочернем классе, не должен быть статическим методом для вызова метода с использованием this или super ссылок.

РЕДАКТИРОВАТЬ на основе введенного вами кода:

Вы не можете сделать вызов метода killAnimalMySquare из класса Weapon, например:

Weapon.killAnimalMySquare();

Вы должны назвать это так:

killAnimalMySquare();

или

super.killAnimalMySquare();

или

this.killAnimalMySquare();

Weapon.killAnimalMySquare() был бы правильным синтаксисом, если killAnimalMySquare () был объявлен как статический.

1 голос
/ 24 мая 2011

Кажется, что метод, из которого вы вызываете метод цели, является статическим.

Вам необходимо создать экземпляр этого класса и вызвать этот метод для экземпляра.

0 голосов
/ 24 мая 2011

Нам нужно больше вашего кода, чтобы дать более конкретный ответ, но общий ответ заключается в том, что вы пытаетесь вызвать нестатический метод из статического метода. Вам нужно создать экземпляр вашего объекта, а затем использовать этот объект для вызова нестатического метода.

Что-то вроде:

MyAbstractClass abstract = new MyDerivedClass();
abstract.my_overridden_method();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...