Как я могу использовать родительский класс, чтобы получить параметр из дочернего класса? - PullRequest
1 голос
/ 05 декабря 2010

У меня есть этот дочерний класс AggressiveAlien, и здесь есть один метод внутри него

public boolean attack()
{
    boolean attack;
    if (currentLocation == this.AggresiveAlien.getCurrentLocation)
    {
        energyCanister = (int) ( (1/2) * alien2.energyCanister + energyCanister);
        lifePoints = (int) (lifePoints - (1/2)*alien2.energyCanister);
        attack = true;
    }
    return attack;
}

Я бы хотел, чтобы возвращаемое значение использовалось в родительском классе Alien

public void gotAttacked()
{
    if (AggresiveAlien.attack())
        energyCanister = energyCanister/2;
}

Но этоКажется, что дает ошибки в части AggresiveAlien.attack ().Могу ли я использовать это возвращаемое значение из AggresiveAlien для использования в Alien?

Помощь будет очень признательна.Спасибо!

Вот еще одна часть дочернего класса

открытый класс AggressiveAlien расширяет Alien {public AggressiveAlien (XYCoordination currentLocation, int energyCanister) {super (currentLocation, energyCanister);}

public int collectCanister(NormalPlanet canister)
{
    super.collectCanister();
    n=1;
}

Ответы [ 3 ]

1 голос
/ 05 декабря 2010

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

((AggressiveAlien)this).attack()

Кроме того, 1/2 может фактически быть 0!1 и 2 интерпретируются как целые числа, что означает значение любого деленияпоэтому 1/2 = (int) 0.5 = 0

проверьте ваши типы!Лучше использовать 0.5 или /2.0, чтобы значение вычислялось как число с плавающей запятой или двойное число (в зависимости от платформы).

Надеюсь, это помогло!

0 голосов
/ 05 декабря 2010

вы говорите, у вас есть родительский и дочерний класс, что означает, что вы используете inheritance здесь.Вы можете легко выполнить свою задачу с помощью виртуальной функции, а затем переопределить в дочернем классе.

в своем классе Alien создайте функцию с именем attack() и переопределите в дочернем классе AggresiveAlien.

вроде как:

Класс инопланетян:

public boolean attack()
{
    return false;
}

Класс AggresiveAlien:

public boolean attack()
{
    return true;
}

и ваша функция получил атаку

public void gotAttacked()
{
    if (this.attack())
        energyCanister = energyCanister/2;
}
0 голосов
/ 05 декабря 2010

Похоже, вы пытаетесь использовать AggresiveAlien статически. Вместо этого вы, вероятно, хотите сделать:


if ((AggresiveAlien)this.attack()) energyCanister = energyCanister/2;

Но я не могу быть уверен, учитывая ограниченный объем информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...