Java 无法将类别A强制转换为类别B
从Java 无法将类别A强制转换为类别B,java,oop,Java,Oop,从Minotaur实例访问字段level的正确方法是什么? (inti=0;i
Minotaur
实例访问字段level
的正确方法是什么?
(inti=0;i<((怪物)this.level;i++)的中出现错误,该不能从玩家向怪物施放
package player;
import monsters.*;
public class Player extends GameCharacter {
public void performAttackOn(GameCharacter who){
if (who instanceof Monster ){
for (int i =0 ; i < ((Monster) this).level ; i++) { // <<
}
public static class Minotaur extends Monster{ // << nested class which is being created and there is need to access it's level
public Minotaur () {
type = "Minotaur";
}
}
}
Minotaur
应该扩展monsters.GameCharacter
,monsters.Monster
并在Player.Player
中覆盖monsters.GameCharacter继承自monsters.GameCharacter的一些方法,这些方法有GameCharacter
接口定义getLevel()
怪物和玩家都实施的方法
public interface GameCharacter
{
public int getLevel( );
}
一旦你做到了这一点,你就可以利用,甚至不需要施展
另外,你真的想把玩家类型的这个施放到怪物类型的上吗?或者你的意思是:
public void performAttackOn(GameCharacter who)
{
for (int i =0 ; i < who.getLevel( ) ; i++)
{
// do stuff...
}
}
public void performAttackOn(游戏角色who)
{
for(inti=0;i
编辑:现在我明白了,您不能对类的字段进行继承。你应该有一个共同的方法
pubic int level();
在您的游戏角色中
。然后,您可以选择是将level
定义为子类的两个不同字段(不推荐),还是让GameCharacter
有一个level字段
这里:((怪物)this).level
您正在将此
实例投射到怪物
。这就是为什么你会出错
也许你的意思是:
if (who instanceof Monster ){
for (int i =0 ; i < ((Monster) who).level ; i++) { // <<
}
}
if(谁是怪物的实例){
对于(inti=0;i<((怪物)who.level;i++){/在您定义的层次结构中,玩家
永远不可能是怪物
,因此无法施放角色
根据上面的检查,我认为您遇到问题的那一行应该是谁
,而不是这个
:
for(int i = 0; i < ((Monster)who).level; i++)
for(inti=0;i<((怪物)who).级别;i++)
这很简单。你检查谁是蒙特勒,但如果是,你将这个投射到莫斯特,这个指的是你现在所在的对象,它意味着某个玩家。替换这个
((怪物)这个)。等级
用这个
((怪物)谁)。等级
错误应该会消失。很简单,你不会。玩家是游戏角色,而不是怪物。所以玩家不会正确地向怪物施放。
if (who instanceof Monster ){
for (int i =0 ; i < ((Monster) who).level ; i++) { // <<
}
}
for(int i = 0; i < ((Monster)who).level; i++)