2016-04-29 61 views
0

對於初學者,我有兩個相關的類:Enemies.java和Sarz.java。敵人擴展了薩爾茲。如何使用數組對象上的另一個類的方法?

public class Enemies extends Sarz { 

它有一個內部有一些敵人物體的陣列。

enemies[0] = new Enemies("Dragon", 100, 100, "Cave"); 
enemies[1] = new Enemies("Saturn Fly Trap", 10, 15, "Forest"); 

在薩爾茲,我製作了一個Sarz類型的數組,並在其中存儲了一些隨機生成的敵人。

Enemies e = new Enemies(); 
e.generateEnemies(); 

Sarz[][] map = new Sarz[5][5]; 

while (count < 4){ 
    row = r.nextInt(5); 
    column = r.nextInt(5); 
    if (map[row][column] == null){ 
    map[row][column] = e.enemies[r.nextInt(8)]; 
    System.out.println(map[row][column].getName() + " at " + row + "," + column); 
    count++; 
    } 
} 

我的問題是,當我使用println語句測試,他們已經正確地存儲在隨機點,但我似乎無法得到任何回報敵人的名字給我。我嘗試過使用Arrays.toString()和Enemies類的getters和setter,但它們不能在地圖數組上工作,因爲它是Sarz類型的。我希望能夠使用map [row] [column] .getEnemyName()或至少返回一個字符串,而不是Enemies @ 14ae5a5的1,0。

回答

2

由於Enemies延伸Sarz,因此你可以施放SarzEnemies對象(如果它是一個有效的。)所以,你可以這樣做:

System.out.println(((Enemies)map[row][column]).getEnemyName() + " at " + row + "," + column); 
+0

謝謝!你能解釋爲什麼這個工作?試圖從我的錯誤中吸取教訓... – Riles

+0

它的作用是因爲你爲'敵人'的物體投了一個'薩爾茲'。所以現在,它可以使用'Enemies'的方法。 – Hackerdarshi

0

相反鑄造超子類的,如果你需要從Sarz對象調用方法getEnemyName(),你應該重新思考你的對象設計,以在Sarz超類中聲明方法,並讓像Enemy這樣的子類繼承它。

相關問題