2013-11-11 4 views
0

У меня есть абстрактный класс с абстрактным методом «Action»Невозможно использовать абстрактный метод

public abstract class BaseAnt { 
    public BaseAnt(String name, int food, int water) { 
     /.../ 
    } 

    public abstract void action(); 
} 

Класс работник расширяет его:

public class WorkerAnt extends BaseAnt { 
    public WorkerAnt() { 
     /.../ 
    } 

    public void action() { 
     AppStat.FOOD += mAge*0.1 + 10; 
    } 
} 

И я пытаюсь сделать петлю

public ArrayList<BaseAnt> antsArray; 
     for (int i = 0; i < AppStat.antList.size(); i++) { 
     if (AppStat.antList.get(i).getName() == "Worker") { 
      AppStat.antList.get(i).action(); 
     } 
    } 

Но я не могу назвать метод действием! Как это исправить?

Ошибка:

The method action() is undefined for the type BaseAnt

+0

Что? Сравнение ?? – Sunstrike

+0

Что значит «Я не могу позвонить»? Вы получаете ошибку компиляции? Вы получаете исключение при запуске? Является ли метод просто не вызванным? – isnot2bad

+0

«Метод action() не определен для типа BaseAnt« – Sunstrike

ответ

0

строк в Java сопоставляются таким образом:

String foo = "foo"; 
String bar = "bar"; 
String foo2 = "foo"; 

foo.compareTo(bar); // false 
foo.compareTo(foo2); // true 

Если сравнить (foo == foo2), вы на самом деле сравнивать ссылки, которые не-нет, в вашем дело.

Edit: Я только что написал крошечный пример теста:

import java.util.ArrayList; 
import java.util.List; 


public class BaseAntQuestion { 

    public static void main(String[] args) { 
     new BaseAntQuestion(); 
    } 

    public BaseAntQuestion() { 
     List<BaseAnt> ants = new ArrayList<>(); 

     for (int i = 0; i < 10; i++) { 
      ants.add(new WorkerAnt()); 
     } 

     for (BaseAnt ant : ants) { 
      ant.action(); 
     } 
    } 

    public abstract class BaseAnt { 
     public abstract void action(); 
    } 

    public class WorkerAnt extends BaseAnt { 

     @Override 
     public void action() { 
      System.out.println("Action!!!"); 
     } 

    } 

} 

И это прекрасно работает.

У вас есть страница AppStat? Моя кишка говорит мне, что у вас может быть конфеты BaseAnt.

+0

О, thnx, но теперь проблема в другом. Я не могу вызвать метод вызова – Sunstrike

0

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

Я бы предположил, что проблема находится где-то в вашем классе AppStat. В частности, посмотрите AppStat.antList и посмотрите, можете ли вы случайно создать или ссылаться на другой класс BaseAnt.

Как уже упоминалось, существует проблема с тем, как вы сравниваете строки, на которые вы хотите посмотреть, но это не то, что вызывает ошибку, которую вы видите.

Смежные вопросы