2012-04-17 88 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);