Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在另一个类中使用特定于对象的变量_Java_Oop_Object_Instance_Non Static - Fatal编程技术网

Java 在另一个类中使用特定于对象的变量

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.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(玩家场); }
否则如果((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)