繁体   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