[英]How do I properly declare an instance of a subclass?
我目前正在使用Java進行基於文本的冒險,以便將其用作測試平台,嘗試從我正在閱讀的這本Java書中學到的新東西。
我現在正在嘗試聲明一個子類的實例(因為播放器的腳本是為了找到它)。 父類是Item
,它有兩個子類: Weapon
和Armour
。
但是,無論我嘗試和聲明它的方式,我正在使用的IDE(Eclipse)標記該行,並出現以下錯誤:
不能訪問類型為Item的封閉實例。 必須使用Item類型的封閉實例限定分配(例如,xx是A(),其中x是Item的實例)。
當我嘗試將其聲明為以下任何一項時:
Item machinePistol = new Weapon();
Weapon machinePistol = new Weapon();
Item machinePistol = new Item.Weapon();
Weapon machinePistol = new Item.Weapon();
作為參考,item類看起來像這樣:
package JavaAIO;
public class Item
{
public String itemName;
public double itemWeight;
public class Weapon extends Item
{
public double damage;
public double speed;
}
public class Armour extends Item
{
public double dmgResist;
public double attSpdMod;
}
}
所以如果有人能告訴我如何正確地實例化武器(所以我可以設置其字段的值並將其交給玩家),我將非常感激。
“無法訪問類型Item的封閉實例。必須使用類型為Item的封閉實例限定分配(例如, xnew A(),其中x是Item的實例) 。”
這是非常自我解釋:
Item machinePistol = new Item().new Weapon();
要么:
Item item = new Item();
Item machinePistol = item.new Weapon();
但是,我強烈建議將它們放在自己的類中,以便最終得到:
Item machinePistol = new Weapon();
去做這個:
Item machinePistol = new Item();
Weapon machinePistol = new Item.Weapon();
你想要將你的內部類聲明為static
:
public static class Weapon extends Item
{
public double damage;
public double speed;
}
public static class Armour extends Item
{
public double dmgResist;
public double attSpdMod;
}
或者另一個(更好的)選擇是不要讓它們成為內部類:
public class Item {}
public class Weapon extends Item {}
public class Armour extends Item {}
然后你就可以這樣做了;
Item machinePistol = new Item();
Item machinePistol = new Weapon();
Item someArmour = new Armour();
你不應該在 Item
聲明類Weapon
和Armour
。 只需在外面宣布:
public class Item {
public String itemName;
public double itemWeight;
}
public class Weapon extends Item {
public double damage;
public double speed;
}
public class Armour extends Item {
public double dmgResist;
public double attSpdMod;
}
所以你可以像這樣實例化它們:
Weapon machinePistol = new Weapon();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.