2012-04-17 67 views
1

我是relativly新Java和experimantating比特使用JavaFX使用其他類「覆蓋」的變量的方法

我想同時使用的方法,由B類到可變從類A改變

主:這就是主類,它包含了所有需要的東西(顯示primaryStage等),它確實有一個構造函數,所以其創建一個實際的「主客體」

public class Main extends Application { 
Sub sub = new Sub(); 
int a; 

// stuff 

public void aMethod() { 
sub.subMethod(); 
} 

} 

子:這個類只surpose是爲了chan GE的變量,它不包含一個構造函數來創建一個「子對象」

public class Sub { 
//stuff 

subMethod(){ 
int a = 5; 
} 

,如果我放線Main main;在子類中,程序會給出我一個空指針異常,如果我調用subMethod()。 好吧......我猜因爲我沒有真正創建主要對象......迄今爲止這麼好。

但是...如果我把該行Main main = new Main();程序甚至不會啓動給我一個「例外同時運行的應用程序」的錯誤

奇怪的事情雖然是,如果我放線Main main = new Main();的子方法。 ..

subMethod(){ 
Main main = new Main(); 
int a = 5; 
} 

...該死的東西實際上工作...(以及它的慢,估計是因爲其創建新對象方法的調用每一個)

爲什麼會這樣?

以及它是如何正確完成的? :) (其他類的使用方法,「覆蓋」變量)

問候 紅

+0

它實際上並不工作,它只是將你設置爲5的數字編譯成不同於'Main'類中的那個。此外,您在該方法中使用的「Main」與另一個不是同一個實例。 – twain249 2012-04-17 16:20:48

+1

你能提供你程序的_entire_源嗎?現在還不清楚。 – 2012-04-17 16:20:54

回答

0

你不應該建立在你的程序中Main多個實例。也許Main不是存儲可變狀態(類成員)最好的地方,但是如果你想要的,你需要的Main的實例傳遞給subMethod(並a公共,或提供一個公共setter方法):

public class Main extends Application { 
Sub sub = new Sub(); 
public int a; 

// stuff 

public void aMethod() { 
sub.subMethod(this); 
} 

} 

public class Sub { 
//stuff 

subMethod(Main main){ 
main.a = 5; 
} 
0

所以你想要一個方法來改變另一個類的字段的值。有幾種方法可以做到這一點。如果你有這個類

public Class A { 
    private int a; 
    ... 

    public void setA(int a) { 
     this.a = a; 
    } 
} 

你可以做這樣的事情

public Class B { 
    private static A instance; 

    .... 

    public static void setA(int a) { 
     instance.setA(a); 
    } 
} 

,或者如果你想直接就可以把一個作爲參數設定的方法

public Class B { 
    ... 

    public static void setA(A a, int val) { 
     a.setA(val); 
    } 
} 

訪問A上的字段,你必須讓它們公開(這通常不是你想要做的,因爲它提供了完整的訪問權限,而不僅僅是給予其他類的訪問權限)

Public Class A { 
    public int a; 
    ... 
} 

然後,你可以做

Public Class B { 
    ... 
    public static void setVal(A a, int val) { 
     a.a = val; 
    } 
} 

此外,如果你沒有方法setABstatic你必須調用它的B一個instance

B b = new B(); 
b.setA(a, val); 

如果它是靜態的,你可以撥打class B

B.setA(a, val);