簡體   English   中英

如何正確聲明子類的實例?

[英]How do I properly declare an instance of a subclass?

我目前正在使用Java進行基於文本的冒險,以便將其用作測試平台,嘗試從我正在閱讀的這本Java書中學到的新東西。

我現在正在嘗試聲明一個子類的實例(因為播放器的腳本是為了找到它)。 父類是Item ,它有兩個子類: WeaponArmour

但是,無論我嘗試和聲明它的方式,我正在使用的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聲明類WeaponArmour 只需在外面宣布:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM