2013-07-21 90 views
1

好吧,所以我一直在繼續學習類和oop語言。我有點困惑。通過類與對象傳遞變量

如果我有一個單獨的球員統計類。在那個班裏,我有一些私人的書,然後有一些功能公開的改變它們。

說我想改變並從我的主類獲取這些int。我創建一個對象並將它們分配給局部變量,然後我可以在我的主腳本中調用局部變量。然後更新stat類中的變量。

這似乎有點愚蠢,我必須做一個局部變量以及一個單獨的變量在不同的類。

對我來說將是有意義的只是能夠調用單獨的類在一個新的對象,每當我想訪問的統計類的變量,但我不能......

讓我知道如果這是不明確的,因爲我可以嘗試擴大更多。

感謝 本

+5

什麼編程語言?另外,你有任何示例代碼? – 2013-07-21 06:40:44

+0

你能澄清你的意思嗎?「在新對象中調用獨立的類」? –

回答

2

您不必在「主」類作出新的變量....

你可以通過創建的對象使用getter和setter。

將玩家統計信息中的變量複製到主類中也不是一個好主意,因爲現在您必須維護兩個相同數據的副本,至少直到您處於主類的範圍內。如果處理不當,也可能導致數據不一致。

假設您正在使用Java,您可以執行此操作。

public class PlayerStats{ 
    private int var1=20; 
    public void setVar1(int var1){ 
     this.var1=var1 
    } 
    public int getVar1(){ 
     return var1 
    } 
} 

public class mainClass{ 
    PlayerStats pStats = new PlayerStats(); 
    pStats.getVar1(); 
    pStats.setVar1(14); 
    System.out.println(pStats.getVar1()); 
} 

感謝您的回答肯定茅塞頓開然而,在mainClass創建如果我在一個函數創建對象我怎麼在同一個類中使用它在另一個函數的對象?

取決於如何以及如果兩個功能連接以及該對象如何集中到您的班級。

如果對象是類非常核心:

也就是說,你在使用它幾乎所有的功能,你的類圍繞與對象播放,那麼你就可以在類中創建它

:沿着這些線路

public class mainClass{ 
    PlayerStats pStats = new PlayerStats(); 

    public void function1() { 
     pStats.setVar1(14); 
     System.out.println(pStats.getVar1()); 
    } 
    public void function2(int x) { 
     pStats.setVar1(x); 
     System.out.println(pStats.getVar1()); 
    } 
} 

如果兩個函數沒有連接水平的東西

如果可能,只需在函數範圍內創建一個新對象。 這比在類級別創建對象要好,因爲對象在函數完成執行後變爲符合垃圾回收的條件。然而,只要對象(主類的實例)在內存中,在類級創建的對象就會留在內存中。

如果連接了兩個功能,Ë你是從第二個函數中調用一個函數:

你可以通過對象作爲參數,這些方針的東西

public class mainClass{ 
    public void function1() { 
     PlayerStats pStats = new PlayerStats(); 
     pStats.setVar1(14); 
     function2(pStats) 
    } 
    public void function2(PlayerStats x) { 
     System.out.println(pStats.getVar1()); 
    } 
} 

也是谷歌dependency injection,這是一個重要的概念,嘗試儘可能經常使用它。它產生好decoupled and testable設計

有太多的話要說,人們已經寫了關於這個主題的書,OO設計本身就是一門藝術。

+0

感謝那個答案,然而,在mainClass中創建的對象中,如果我在一個函數中創建對象,我該如何在同一個類的另一個函數中使用它? – Anim8

+0

@ Anim8查看編輯,是否有助於澄清? – user2580076

+0

謝謝你這麼多。它清楚我還有很長的路要走:)我肯定會採取您的依賴注入的建議。再次感謝,Ben – Anim8