2011-11-04 73 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);