Ich muss einen neuen Krieger erstellen, einen Namen zuweisen und seine Beschreibung mit der in der GameCahracter-Klasse angegebenen Funktion abrufen. Wenn ich versuche zu rennen - es stoppt auf weapon.type ; // <<Exception
zeigt das weapon=null
. Warum? Soweit ich weiß, hat der Kriegerkonstrukteur der Variablen weapon
einen Link zur neuen Weapon.Sword zugewiesen. Dann mit variabler Waffe sollte ich in der Lage sein, auf sein Feld type
zuzugreifen. Was ist hier falsch?Verschachtelte statische Klasse kann ihre statischen Felder nicht zurückgeben
abstract class GameCahracter{
public String name;
public String type;
public Weapon weapon;
public int hitPoints;
public String getDescription(){
return name + "; " +
type + "; " +
hitPoints + " hp; " +
weapon.type ; // << Exception
}
public static class Warrior extends Player{
public Warrior() {
type = "Warrior";
hitPoints = 100;
Weapon.Sword weapon = new Weapon.Sword();
}
}
abstract class Player extends GameCahracter {
}
abstract class Weapon {
public int damage;
public String type = "default";
public int getDamage(){
return this.damage;
}
public static class Sword extends Weapon{
public Sword() {
String type = "Sword";
int damage = 10;
}
}
}
GameCahracter.Warrior wr = new GameCahracter.Warrior();
wr.setName("Joe");
System.out.println(wr.getDescription());
EDIT1
Aus irgendeinem Grund habe ich default
Zeichenfolge beim Drucken weapon.type
. Warum? Wie kann ich type
zu Sword
bekommen?
Sie wissen, dass 'Character' nicht' Cahracter' geschrieben ist, richtig? –
@Truth: Zumindest ist es konsistent. Das zählt mehr, was den Compiler angeht. – Makoto
Danke, ich weiß wie Charakter geschrieben ist. =) Die Frage ist, warum * Waffe * ist * null *. –