2012-12-30 119 views
5

我最近選擇了Java並遇到了問題。我有不同類別的幾個文件,但我想不通我怎麼能訪問比他們在被宣佈爲一個其他文件的其他類的對象,例如:訪問其他類的對象

player.java: 
public class Player 
{ 
    public static void main(String[] args) { 
     Player player = new Player(); 
    } 
    public int getLocation() 
    { 
     return 2; 
    } 
} 

monster.java: 
public class Monster 
{ 
    public void attackPlayer() 
    { 
     player.getLocation(); 
    } 
} 

我不知道我如何從其他文件和類本身有效地訪問其他類的這些對象?我知道我可以將對象變爲靜態的,然後通過它們所在的類來作爲變量來訪問它們,但這似乎相反 - 直覺?我來自一個較少面向對象的編程背景,所以我仍然試圖理解java的編程風格。

+0

導入它們,並通過將一個作爲參數使用對象的一個​​實例,是怎樣的? –

回答

8

你可能只是想這樣的事情:

player.java: 
public class Player 
{ 
    public static void main(String[] args) { 
     Player player = new Player(); 
     Monster monster = new Monster(); 
     monster.attackPlayer(player); 
    } 
    public int getLocation() 
    { 
     return 2; 
    } 
} 

monster.java: 
public class Monster 
{ 
    public void attackPlayer(Player player) 
    { 
     player.getLocation(); 
    } 
} 

希望幫助/很有意義!

+0

謝謝!正是我想了解的。謝謝。 –

1

一個開始的好地方就是通過你想要攻擊的玩家「何時」進行怪物攻擊。

battle.java

public class Battle { 

    public static void main(String[] args) { 
    Player player = new Player(); 
    Monster monster = new Monster(); 
    monster.attackPlayer(player); 
    } 
} 

player.java:

public class Player 
{ 
    public int getLocation() 
    { 
     return 2; 
    } 
} 

monster.java:

public class Monster 
{ 
    public void attackPlayer(Player player) 
    { 
     player.getLocation(); 
    } 
} 
0

類是隻是一個對象的藍圖。

只能調用Player類中定義的實際播放器對象,當您通過實例的方法 - 你在下面一行main(String[] args)方法做到了這一點:

Player player = new Player(); 

然而, player變量現在僅適用於其聲明範圍內的代碼 - 在此情況下,可以在main(String[] args)方法中的此行後面的任何位置使用代碼。

它不在此範圍之外。 Monster類中的attackPlayer()方法絕對不在此範圍之內!當您在那裏引用player時,編譯器不知道該令牌引用的內容。在開始調用方法之前,您必須傳入一個類型爲Player的參數,名稱爲player(或者其他任何您喜歡的參數)。