2010-12-05 25 views
1

J'ai cette classe enfant AggressiveAlien et est une méthode ici à l'intérieurComment puis-je utiliser la classe parent pour obtenir un paramètre de la classe enfant?

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; 
} 

Je souhaite que la valeur retournée à utiliser dans la classe parente Alien

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

Mais il semble donner erreurs sur la partie AggresiveAlien.attack(). Est-il possible pour moi d'utiliser cette valeur retournée par AggresiveAlien pour être utilisée dans Alien?

L'aide serait grandement appréciée. Merci!

Voici une autre partie de la classe enfant

public class AggressiveAlien étend Alien { publique AggressiveAlien (XYCoordination CurrentLocation, int energyCanister) { super (CurrentLocation, energyCanister); }

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

Quelle est cette erreur que vous obtenez "sur la partie AggresiveAlien.attack()"? – khachik

+0

Difficile de dire à partir de ce que vous avez fourni, mais il semble que AggressiveAlien n'est pas l'objet où se trouve la fonction d'attaque? – Doggett

+0

Haine de demander cela, mais avez-vous importer 'AggressiveAlien'? –

Répondre

0

Il semble que vous essayez d'utiliser AggresiveAlien statiquement. Au lieu de cela, vous voulez probablement faire:


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

Mais je ne peux pas être sûr étant donné la quantité limitée d'informations.

0

vous dites, vous avez une classe parent et enfant, ce qui signifie que vous utilisez inheritance ici. vous pouvez facilement accomplir votre tâche en utilisant la fonction virtuelle, puis en remplaçant dans la classe enfant.

dans votre classe Alien créer une fonction appelée attack() et remplacer dans la classe enfant AggresiveAlien.

comme suit:

classe Alien:

public boolean attack() 
{ 
    return false; 
} 

classe AggresiveAlien:

public boolean attack() 
{ 
    return true; 
} 

et votre fonction gotAttacked

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

Je pense que vous pourriez avoir deux problèmes ... D'abord, vous devez lancer le type de base du type d'enfant, comme

((AggressiveAlien)this).attack() 

En outre, 1/2 peut effectivement être 0! 1 et 2 sont interprétés comme des entiers, ce qui signifie que la valeur de toute division est plancher! donc 1/2 = (int) 0.5 = 0

vérifiez vos types! Mieux vaut utiliser 0.5 ou utiliser/2.0 pour forcer la valeur à calculer en float ou en double (selon la plateforme).

J'espère que cela a aidé!