2010-12-05 13 views
0

La partie "super" Je ne suis pas très clair en Java, alors comment puis-je le coder?Quelqu'un peut-il m'aider à résoudre le problème qui concerne le "super" en Java?

public class AggressiveAlien extends Alien 
{ 

public AggressiveAlien(XYCoordination currentLocation, int energyCanister) 
{ 
super(currentLocation, energyCanister); 
} 

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

private boolean attack(int lifePoints) 
{ 
boolean attack; 
if (AggresiveAlien.currentLocation() = Alien.getOtherAlien()) 
{ 
    AggresiveAlien.energyCanisters = (int) (1/2) * Alien.energyCanisters + AggresiveAlien.energyCanisters; 
    lifePoints = lifePoints - 1; 
    attack = true; 
} 
return attack; 
} 
} 

Répondre

1

Ce que vous avez écrit est correct, à condition que la classe Alien a un constructeur avec la signature:

public Alien(XYCoordination, int) 

Plus précisément,

super(currentLocation, energyCanister); 

signifie, avant d'exécuter ce constructeur exécuter le constructeur de la superclasse immédiate lui passant les valeurs currentLocation et energyCanister. Notez que chaque constructeur (hormis le constructeur Object) s'enchaîne à un constructeur de superclasse, explicitement ou implicitement.


Cependant, ce qui suit est probablement incorrect:

AggresiveAlien.currentLocation() 

Cela nécessite currentLocation() être une méthode statique, et cela impliquerait que tous les cas d'un AggresiveAlien ont le même endroit ... qui doesn Ne fais pas beaucoup de sens. En fait, je pense que la méthode doit être une méthode d'instance et l'appel devra donc être:

this.currentLocation() 

ou tout simplement

currentLocation() 

Vous avez fait cette erreur dans un certain nombre d'endroits.

1

Cela signifie « appeler la version de cette méthode (ou le constructeur) qui est défini dans la superclasse immédiate ».