操作方法时出现问题-Java
我试图操作一个抽象类中的公共方法。 我试图从一个公共方法内部操作该方法,该方法位于扩展另一个抽象类的公共类内部,但编译器给了我:操作方法时出现问题-Java,java,inheritance,methods,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()
"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;
}
}
公共级野狗扩展动物
{
公共无效法
{
if(kangarooCrossing())
{
killAnimalMySquare();//调用目标方法的方法似乎是静态的
您需要创建此类的实例并对实例调用此方法。要使用this
或super
引用调用方法,您在子类中创建的公共方法不应是静态方法
根据您提交的代码进行编辑:
不能像这样从类武器调用方法killAnimalMySquare
:
Weapon.killAnimalMySquare();
killAnimalMySquare();
你应该这样称呼它:
Weapon.killAnimalMySquare();
killAnimalMySquare();
或
或
如果killAnimalMySquare()是正确的语法,则声明为静态。我们需要更多的代码来给出更具体的答案,但一般的答案是,您试图从静态方法中调用非静态方法。您需要创建对象的实例,然后使用该对象调用非静态方法
比如:
MyAbstractClass abstract = new MyDerivedClass();
abstract.my_overridden_method();
您需要对子类的实例调用该方法。您能给我提供一个示例吗?newsubclasstype().method\u name()
而不是SubclassType.method\u name())
@Master C-您能给我们看一下您的代码吗?@MasterC,请不要使用标志按钮回答您的问题,而是使用每个答案下面的评论系统。谢谢。请参阅上面我的编辑部分。因此我应该将killAnimalMySquare()声明为静态?因为有了您的3个给定选项,编译器会说:“找不到符号-方法killAnimalMySquare()”..方法killAnimalMySquare()是在抽象类武器中定义的,不知何故我之前认为子类Dingo是在扩展武器,但这显然不是编译器抱怨的原因。使killAnimalMySquare为静态也不起作用,因为该方法调用武器或演员类的其他方法。此外,武器是抽象类,所以您可以我甚至不创建那个类的实例。顺便说一句,我相信武器没有必要是抽象的,因为那个类中没有抽象方法(除非参与者有一些抽象方法,而这些抽象方法并没有在武器中实现)。我不希望客户从“武器”创建对象。那么,我应该怎么做才能解决这个问题?有一些方法可以限制客户创建类武器实例,比如将其构造函数设置为私有或将其设置为Dingo的内部私有类。有关更多信息,请参阅本文:或此讨论: