2017-04-25 165 views
0

說我有一個方法在一個類中進行運動(稱之爲移動(地球))。隨機化函數實現

animal.move(地球)

是否有可能隨機的實際執行不與功能的方法,搞亂:該功能是利用繼承和這樣這樣在其他類中實現?

public void rMove(Earth myEarth) throws InterruptedException 
{ 
    int x = (int) location.getX(); 
    int y = (int) location.getY(); 
    int xMax = myEarth.getX() - 1; 
    int yMax = myEarth.getY() - 1; 
    double w = Math.random(); 
    int rMove = (int) (w + Math.random()*4); 

    switch(rMove) 
    { 
     case NOR: 
      location.setLocation(x,y-1); 
      break; 
     case SOU: 
      location.setLocation(x,y+1); 
      break; 
     case EAS: 
      location.setLocation(x+1,y); 
      break; 
     case WES: 
      location.setLocation(x-1,y); 
      break; 
    } 
} 

包含該方法的類被擴展到另一個類

public class Carnivore extends Animal 

在類食肉動物,使用這樣的上述功能的動物移動:

super.rMove(myEarth); 

有一大堆的其他代碼涉及運動,但我不認爲這是相關的。我的問題是如何修改上面的實現而不修改實際的rMove。

+0

您能向我們展示一個您到目前爲止所做的工作的例子嗎?你的意思是改變方法的實現而不改變它的簽名? – ACOMIT001

+0

我用移動方法更新了我的問題。這個類被擴展到另一個類中,所以我可以在另一個類Animal中使用該函數。我的問題是,我可以在不修改原始方法的情況下修改Animal.Move(Earth)函數的實現嗎? – AMR

+0

你想在不修改方法的情況下修改方法?你爲什麼認爲這是可能的? – shmosel

回答

0

我會看看有一個獨立的隨機化邏輯的方法,可以由動物的子類覆蓋。我不是Java開發人員,所以語法可能不完全正確,但是這給了你一個想法。例如:

public abstract class Animal 
{ 
    public abstract int moveRandom(); 
} 

public class Carnivore extends Animal 
{ 
    public int moveRandom() { 
     double w = Math.random(); 
     int rMove = (int) (w + Math.random()*4); 
     return rMove; 
    } 
} 


public void rMove() { 
    int rMove = this.rMove(); 
}