Java 使用其他类的方法“覆盖”变量
我对java比较陌生,并对javafx进行了一些体验 我想在使用类B中的方法时更改类a中的变量 Main:这是主类,它包含所有需要的东西,显示primaryStage等。它确实有一个构造函数,所以它不创建实际的主对象Java 使用其他类的方法“覆盖”变量,java,Java,我对java比较陌生,并对javafx进行了一些体验 我想在使用类B中的方法时更改类a中的变量 Main:这是主类,它包含所有需要的东西,显示primaryStage等。它确实有一个构造函数,所以它不创建实际的主对象 public class Main extends Application { Sub sub = new Sub(); int a; // stuff public void aMethod() { sub.subMethod(); } } Sub:这个类的作用是更改变量
public class Main extends Application {
Sub sub = new Sub();
int a;
// stuff
public void aMethod() {
sub.subMethod();
}
}
Sub:这个类的作用是更改变量a,它不包含用于创建子对象的构造函数
public class Sub {
//stuff
subMethod(){
int a = 5;
}
如果我把主线放在主线上;在子类中,如果调用子方法,程序将给我一个null指针异常。
好吧…我想是因为我没有真正创建主对象。。。到目前为止还不错
但是。。。如果我输入行Main=newmain;程序甚至不会在运行应用程序错误时给我一个异常
奇怪的是,如果我把行Main=newmain;在子方法中
subMethod(){
Main main = new Main();
int a = 5;
}
…这该死的东西实际上是工作的…嗯,它很慢,猜猜看,因为每次调用该方法都会创建一个新对象
为什么会这样
如何正确地完成它
使用其他类的方法覆盖变量
问候
红色您不应该在程序中创建多个Main实例。Main可能不是存储可变状态类成员的最佳位置,但如果需要,需要将Main的实例传递给subMethod并公开,或者提供一个公共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;
}
因此,您需要一个方法来更改另一个类的字段的值。有几种方法可以做到这一点。如果你有这门课
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);
}
}
或者,您可以将A作为set方法的参数
public Class B {
...
public static void setA(A a, int val) {
a.setA(val);
}
}
如果您想直接访问上的字段,则必须将其公开,这通常不是您想要做的,因为它提供了完整的访问权限,而不仅仅是提供其他类所需的访问权限
Public Class A {
public int a;
...
}
那你就可以了
Public Class B {
...
public static void setVal(A a, int val) {
a.a = val;
}
}
另外,如果您没有将B中的方法setA设置为static,则必须在B的实例上调用它,如
如果它是静态的,你把它叫做B类
它实际上不起作用,只是编译了你设置为5的数字与主类中的数字不同。另外,你在方法中使用的Main与另一个实例也不相同。你能提供你程序的全部源代码吗?现在还不清楚。
B b = new B();
b.setA(a, val);
B.setA(a, val);