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;
}