我想創建一個抽象的超類,稱爲單位,並給它一些受保護的靜態字段,如姓名,健康,attackPower等靜態初始化從超類變量在每個子類
public abstract class Unit {
protected static String name;
protected static int maxHealth;
protected static int atkPower;
public String getName() {
return name;
}
}
的
然後我想創建幾個子類,比如Soldier,Wizard和Tank,並且在每個類中靜態分配受保護的字段,以便所有的Soldiers具有相同的字段值,所有的Wizards具有相同的字段值,並且所有坦克具有相同的字段值。我想是這樣的:
public class Soldier extends Unit {
static {
name = "Soldier";
maxHealth = 80;
atkPower = 15;
}
}
public class Wizard extends Unit {
static {
name = "Wizard";
maxHealth = 60;
atkPower = 25;
}
}
如果我創建一個嚮導對象,嚮導,然後調用wizard.getName()我得到的「精靈」。但是,如果我然後創建一個士兵對象,士兵,調用wizard.getName()而不是返回「士兵」。士兵對象靜態地覆蓋了嚮導和士兵類中變量的值。
Wizard wizard = new Wizard();
wizard.getName(); //Wizard
Soldier soldier = new Soldier();
wizard.getName(); //Soldier
有沒有辦法做我想做的事情,即爲每個子類中的相同變量保留不同的靜態值?
「不要使用靜態」是正確的。在你所說的問題的背景下,「靜態」是一個可怕的想法。使用[實例變量。](https://docs.oracle.com/javase/tutorial/java/javaOO/variables.html) – markspace
@shadowarcher是否有任何理由讓變量保持靜態? – user3437460