2010-12-05 22 views
0

Der "super" -Teil ist mir in Java nicht ganz klar, also wie kann ich das programmieren?Kann jemand mir helfen, das Problem zu lösen, das über das "Super" in Java ist?

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

Antwort

1

Was Sie geschrieben haben, richtig ist, vorausgesetzt, dass die Alien Klasse einen Konstruktor mit der Signatur hat:

public Alien(XYCoordination, int) 

Insbesondere

super(currentLocation, energyCanister); 

Mittel, bevor Sie diesen Konstruktor ausführen führen Sie den Konstruktor für die unmittelbare Oberklasse übergibt ihm die currentLocation und energyCanister Werte. Beachten Sie, dass jeder Konstruktor (abgesehen vom Object-Konstruktor) explizit oder implizit mit einem Superklassenkonstruktor verkettet ist.


Allerdings ist die folgende wahrscheinlich falsch:

AggresiveAlien.currentLocation() 

Das currentLocation() erfordert eine statische Methode zu sein, und das würde bedeuten, dass alle Instanzen eines AggresiveAlien die gleiche Lage haben ... was doesn Es macht keinen Sinn. In der Tat, ich denke, die Methode eine Instanzmethode sein muss, und der Anruf würde also lauten:

this.currentLocation() 

oder nur

currentLocation() 

Sie haben diesen Fehler in einer Reihe von Orten.

1

Es bedeutet „nennen die Version dieser Methode (oder Konstruktor), die in der unmittelbaren Oberklasse definiert ist“.

Verwandte Themen