Java 在另一个类中使用特定于对象的变量
我查看了所有其他问题,但似乎找不到问题的答案:我需要使用一个非静态字段(对于我创建的每个对象都是独立的),并且需要在另一个类中访问该变量。代码片段:(Enemytank.java) 以及我需要变量enemyStage的类:(Playertank.java) 发生公共无效冲突(GameItem Collidatem) { Enemytank enemyTank1=新Enemytank(mygame); System.out.println(“pt=“+enemyTank1.getEnemyStage()); if((Enemytank的collidedItem实例)&&&(playerShields>0)&&&(enemyTank1.getEnemyStage()!=3)) { 这是一个游戏场--; mygame.setShieldsonDashboard(玩家场); }Java 在另一个类中使用特定于对象的变量,java,oop,object,instance,non-static,Java,Oop,Object,Instance,Non Static,我查看了所有其他问题,但似乎找不到问题的答案:我需要使用一个非静态字段(对于我创建的每个对象都是独立的),并且需要在另一个类中访问该变量。代码片段:(Enemytank.java) 以及我需要变量enemyStage的类:(Playertank.java) 发生公共无效冲突(GameItem Collidatem) { Enemytank enemyTank1=新Enemytank(mygame); System.out.println(“pt=“+enemyTank1.getEnemyStag
否则如果((Enemytank的Collidatem实例)和(&&(playerShields您需要利用多态性。在
GameItem
类中声明方法getEnemyStage
(或者它是接口吗?),然后您将能够询问Collidatem.getEnemyStage()
并准确地从该对象获取数据。或者,将CollidateTM
向下投射到EnemyTank
中,并调用方法:((EnemyTank)CollidateTM)。getEnemyStage()
另外,通过调用getter方法,将enemyStage
设为private
,无需将设为public
,因为它将被间接访问
if (collidedItem instanceof Enemytank && playerShields > 0 &&
((Enemytank)collidedItem).getEnemyStage() != 3) {
....
}
调用CollisionOccursed时将引用传递给对象。因此,将CollisionOccursed更改为:
public void collisionOccured(GameItem collidedItem, Enemytank enemyTank) //a change here
{
System.out.println("pt= " + enemyTank.getEnemyStage()); // now you can call enemyTank with the correct refrence
if ((collidedItem instanceof Enemytank) && (playerShields > 0) && (enemyTank1.getEnemyStage() != 3))
{
this.playerShields--;
mygame.setShieldsonDashboard(playerShields);
}
else if ((collidedItem instanceof Enemytank) && (playerShields <= 0) && (enemyTank.getEnemyStage() != 3))
{
System.out.println("hit player!");
this.playerLives--;
mygame.setLivesonDashboard(playerLives);
}
if (collidedItem instanceof Shield)
{
this.playerShields++;
mygame.setShieldsonDashboard(playerShields);
mygame.deleteGameItem(collidedItem);
this.playerUpgrades();
}
}
有了这个答案,我假设您在EnemyTank类中调用collisonOccured,因为您没有张贴调用发生的位置。如果没有,您需要在调用CollisionOccursed时引用EnemyTank的对象(因此在调用reference到正确的对象时更改
this
)您的意思是什么“如何引用现有对象并获得该特定值?“。你感兴趣的现有对象是什么?你可能想展示更多的代码。enemyStage是如何设置的以及在哪里设置的?-MoveableGameItem.java是一个抽象类,它扩展了GameItem-GameItem.java是一个抽象类,GameItem.java也扩展为nothing。我无法执行getEnemyStage()在那里,因为它看不到Enemytank.java的任何内容,对吗?我尝试扩展Battley.Enemytank(在另一个包中),但它说某个超级构造函数未定义更新答案中的代码。这就是我要说的。更新:谢谢!我将其降级,它现在似乎正在工作:)@MarkoTopolnik,你的答案是使用多态性,特别是在GameItem
类中声明方法,即使该类在另一个包中也可用吗?因为我现在正在努力解决这个问题。无法让它工作。我不能这样做,因为方法CollisionOccursed在MoveableGameItem.java中,它扩展到GameItem.java.I不能指向“Enemytank Enemytank”
if (collidedItem instanceof Enemytank && playerShields > 0 &&
((Enemytank)collidedItem).getEnemyStage() != 3) {
....
}
public void collisionOccured(GameItem collidedItem, Enemytank enemyTank) //a change here
{
System.out.println("pt= " + enemyTank.getEnemyStage()); // now you can call enemyTank with the correct refrence
if ((collidedItem instanceof Enemytank) && (playerShields > 0) && (enemyTank1.getEnemyStage() != 3))
{
this.playerShields--;
mygame.setShieldsonDashboard(playerShields);
}
else if ((collidedItem instanceof Enemytank) && (playerShields <= 0) && (enemyTank.getEnemyStage() != 3))
{
System.out.println("hit player!");
this.playerLives--;
mygame.setLivesonDashboard(playerLives);
}
if (collidedItem instanceof Shield)
{
this.playerShields++;
mygame.setShieldsonDashboard(playerShields);
mygame.deleteGameItem(collidedItem);
this.playerUpgrades();
}
}
collisionOccured(collidedItem, this); //where this refrence to this object (which is a EnemyTank)