2012-11-14 167 views
0

我使用Java和我有這個層次的java:如何創建類,所有的訪問界面對象

class Seq 

class For extends Seq 

interface SeqIt 

Class ForIt implements SeqIt 

而且ForIt有一個構造函數:public ForIt(For x) //takes For objects

到目前爲止一切工作正常。 現在我想創建一個名爲FU的新類,它可以訪問我創建的任何ForIt對象。 而這個FU類必須有這個簽名的方法public static int sum1(For MyFor) 例如,如果ForIt對象裏面有一個名爲myArr的數組。這種方法sum1應該返回MyFor對象內數組myArr的所有元素的總和

如何創建此類FU

+1

什麼意思是通過訪問任何'ForIt'對象? –

+0

例如,我在主要一個名爲r1的對象使用構造函數聲明ForIt r1 = new ForIt(new For(3,8,2)); 和另一個ForIt r2 =新的ForIt(新的For(4,3,1)); 好嗎? 所以現在我想使用FU類來獲得r1數組或r2數組內的元素的總和 int sum =(FU.sum1(r1)); int sum2 =(FU.sum1(r2)); – CSawy

+0

你的問題說'FU'有一個'sum1(For)'方法,但你的註釋上面通過'ForIt'到'sum1'。哪個是對的?你是否通過了「For」或「ForIt」? – Tim

回答

0

2種方式我能想到的是:

  • 您創建的每個時間一個ForIt類,將它添加到您的FU類 - 完成後,調用總和方法
  • ForIt類構造函數調用FU類的靜態方法讓它知道一個新的ForIt被創建

我個人使用選項1,因爲它避免了靜態變量,這可能是一個痛苦的工作。選項2適用於一個簡單的用例。

//not thread safe 
class FU { 
    private final List<ForIt> list = new ArrayList<>(); 
    private int sum = 0; 

    void add(ForIt fi) { 
     list.add(fi); 
     sum += fi.getValue(); 
    } 

    int sum() { 
     return sum; 
    } 
} 

選項1是相當straigthforward(創建一個FU對象,每次創建ForIt實例時,將其添加到FU對象)。
選項2:

class ForIt { 
    private static final FU fu = new FU(); 

    ForIt() { 
     fu.add(this); 
    } 

    static int sum() { 
     return fu.sum(); 
    } 
} 

public static void main(String... args) { 
    new ForIt(); 
    new ForIt(); 
    System.out.println(ForIt.sum()); 
} 
-1

從你的描述,你可以做。⊙在FU類實例變量,像這樣:

public class FU { 
    public ForIt forit; // Now you have access to ForIt object 

    public static int sum1(For MyFor) { 
     // Iterate array in ForIt instance 
     FU fu = new FU(); 
     for (int something: fu.forit.myArr){ 
       ........... 
     } 
     ........ 
    } 

} 
+0

非靜態變量forit不能從靜態上下文中引用 –

+0

剛剛添加了靜態關鍵字。我的壞 – vandershraaf

+0

我試過這個,但是這使我可以訪問For對象,但不能訪問ForIt函數[ForIt與For For不同]。我的問題清楚了嗎? – CSawy

相關問題