2011-11-04 112 views
1

我对java如何处理所有类都是困惑。java可变范围问题

我做一个类foo.java并在foo.javamain方法我做的foo一个实例(一类创建本身是没有意义的我,但它在java中似乎正常的吗?)

然后我做的一个实例另一个类bar,所以我现在在foo类中有foobar的实例,但是如何访问带有bar中的函数的foo的成员变量?

foo是处理代码,bar是UI,需要查看foo中的所有数据,以便它可以显示它。

+1

小样本PF代码将是非常有价值的。你可以发布你的两个类,以便我们可以看到你写的到目前为止? – Mechkov

+0

在你的酒吧对象中拥有一个foo对象 –

回答

3

有很多的可能性。一种方法是构造foobar实例:

public class Foo { 
    public void someFooMethod() { 
    } 
    public static void main(String[] args) { 
     Foo foo = new Foo(); 
     Bar bar = new Bar(foo); 
     bar.someBarMethod(); 
    } 
} 

public class Bar { 
    private Foo fooLocalRefence; 
    public Bar(Foo foo) { 
     this.fooLocalReference = foo; 
    } 
    public someBarMethod() { 
     this.fooLocalReference.someFooMethod(); 
    } 
} 
+1

是的,组合总是一个更好的选择 –

0

首先,Foomain方法可能static,所以没有的Foo创建Foo一个实例。

其次,Foo应该通过getter方法公开其数据,并且Bar应该通过在所提供的Foo实例上调用getter方法来访问数据。

+0

吧,它是如何调用getter方法的?你刚才提出的问题没有解决它 – Skeith

+0

@Skeith我说:“Foo应该通过getter方法暴露它的数据,并且Bar应该访问所提供的Foo实例上的数据”。假定getter方法是公开的,所以Bar将能够调用它们。这正是Pablo发布的内容(除非他的Foo方法返回void)。 –

1

你错了“创建自己的类对我来说没有意义,但在java中似乎很正常”,因为你的术语是错误的。你实际上在做的是创建类Foo实例。而main()仅仅是应用程序的入口点,因为JVM只需要知道从哪里开始。

如果您希望两个不同类的实例共享信息,则需要提供其中一个参考。像这样的:

Foo foo = new Foo(); 
Bar bar = new Bar(foo);