Java dosen';我无法识别对象属于子类

Java dosen';我无法识别对象属于子类,java,inheritance,abstract-class,instanceof,Java,Inheritance,Abstract Class,Instanceof,所以我在做一些关于制作一个小游戏原型的课程。我有这些简单的类(还有一些不相关的类): 但是当我试图编译这个的时候 Implementations.java:56: error: cannot find symbol state.currentCharacter.weapon.rounds += 10; ^ symbol: variable rounds location: var

所以我在做一些关于制作一个小游戏原型的课程。我有这些简单的类(还有一些不相关的类):

但是当我试图编译这个的时候

Implementations.java:56: error: cannot find symbol
            state.currentCharacter.weapon.rounds += 10;
                                         ^
  symbol:   variable rounds
  location: variable weapon of type Weapon

我想要的只是类
额外回合
来检查
武器
是否属于类
范围武器
,并采取相应的行动,但我不知道哪里出了问题。感谢您的帮助

您的武器属于武器等级。您必须将其强制转换为RangedWeapon,以便编译器知道它是RangedWeapon:

if (state.currentCharacter.weapon instanceof RangedWeapon){
   ((RangedWeapon)state.currentCharacter.weapon).rounds += 10;
}

在检查是否具有该类型后,您必须将state.currentCharacter.wearm转换为RangedWeapon

RangedWeapon rangedWeapon = (RangedWeapon) state.currentCharacter.weapon;
rangedWeapon.rounds +=10;

state.currentCharacter.wearm
RangedWeapon
的一个实例,但是它的属性
rounds
隐藏的,因为
state.currentCharacter.wearm
武器类型下

要打开
RangedWeapon
类的属性,必须将其显式强制转换为
RangedWeapon
类:

RangedWeapon rangedWeapon = ((RangedWeapon) state.currentCharacter.weapon);
rangedWeapon.rounds +=10;

似乎您将
state.currentCharacter.wearm
声明为
wearm
,然后尝试访问其
轮数
字段

在编译阶段,编译器只知道它是
武器
,而
武器
没有
回合

您可以强制转换到
RangedWeapon
,使其可编译:

if (state.currentCharacter.weapon instanceof RangedWeapon){
    RangedWeapon rangedWeapon = (RangedWeapon)state.currentCharacter.weapon;
    rangedWeapon.rounds += 10;
}

该类武器没有“回合”字段,因此您需要首先将其强制转换为RangedWeapon您的解决方案将无法编译,因为您试图将“回合”强制转换为RangedWeapon(第一个错误)
if (state.currentCharacter.weapon instanceof RangedWeapon){
    RangedWeapon rangedWeapon = (RangedWeapon)state.currentCharacter.weapon;
    rangedWeapon.rounds += 10;
}