2012-11-14 161 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

相关问题