我創建了兩個類,它們定義了對象的一般結構,以及許多父類變體的子類。變量在超類中有類型聲明,在子類中有聲明值。但是:AS3超類變量和子類錯誤
[Body_Part_Armor.as]
package {
import flash.display.*;
public class Body_Part_Armor extends MovieClip
{
var agility_malus;
var hp_total;
var defense;
var armor_extra_height;
var armor_extra_width;
var hp_left;
public function Body_Part_Armor()
{
hp_left = hp_total;
}
}
}
[Chest_Armor_1.as]
package
{
public class Chest_Armor_1 extends Body_Part_Armor
{
agility_malus = 2;
hp_total = 20;
defense = 7;
armor_extra_height = 10;
armor_extra_width = 6;
public function Chest_Armor_1()
{
}
}
}
對於編譯器的調試測試Body_Part_Armor和Chest_Armor_1完全細,而
[ Weapon.as]
package
{
import flash.display.*;
public class Weapon extends MovieClip {
var weapon_type:Number;
var n_attacks:Number;
var damage:Number;
var precision:Number;
// some other variables in here
var is_empty_weapon:Boolean;
public function Weapon()
{
}
}
}
[Empty_Arm_Weapon.as]
package
{
public class Empty_Arm_Weapon extends Weapon
{
is_empty_weapon = true;
public function Empty_Arm_Weapon() {
}
}
}
給我以下錯誤: 1120:未定義的屬性訪問is_empty_weapon (但如果我寫VAR is_empty_weapon = TRUE;在Empty_Arm_Weapon中,它會抱怨與名稱空間public中的變量的繼承定義發生衝突)。
但是,如果我在構造函數Empty_Arm_Weapon()中定義了變量值is_empty_weapon = true,那麼我將不會收到任何錯誤。
我想我錯過了一些非常明顯的事情,但我無法分辨兩種情況之間的區別,但一種可行,另一種則不行。 你能幫我嗎? 謝謝!
正如我已經在OP說,我可以用它在構造函數中定義的價值的工作。問題是爲什麼然後它在Body_Part_Armor - Chest_Armor_1中使用子類類定義中的值聲明(不在構造函數內)正常工作? – Alucardy80 2012-08-08 00:43:03
這樣做沒有任何意義。任何不在構造函數或方法中的東西都應該是該類的新變量聲明。在這裏做任務對我來說並不意味着什麼,你什麼時候期望這個任務發生?對象創建之前?那麼它將沒有內存來存儲這些屬性。只有在構造函數或更高版本中對我有意義。我不知道爲什麼這不會爲你造成問題。 – shaunhusain 2012-08-08 00:45:07
我是否正確地將你的代碼分割成單獨的文件? – shaunhusain 2012-08-08 00:49:03