簡體   English   中英

使用其他類的方法“覆蓋”變量

[英]using methods of other classes to “overwrite” variables

我是Java的相對新手,並且使用javafx進行了一些實驗

我想使用B類的方法更改A類的變量

Main:這是主類,它包含所有必需的東西(顯示primaryStage等),它確實具有構造函數,因此其創建實際的“主對象”

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;
}

如果我把線Main main; 在Sub類中,如果我正在調用subMethod(),則程序將給我一個nullpointer異常。 好的...我想是因為我實際上沒有創建主對象...到目前為止還不錯。

但是...如果我把Main main = new Main(); 該程序甚至不會開始給我“運行應用程序時出現異常”錯誤

奇怪的是,如果我把Main main = new Main(); 在subMethod中...

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

...該死的東西實際上起作用了...(它的速度很慢,猜測是因為每次調用該方法都會創建一個新對象)

為什么會這樣?

以及如何正確完成? :)(使用其他類的方法“覆蓋”變量)

問候紅色

您不應在程序中創建多個Main實例。 也許Main不是存儲可變狀態(類成員)最好的地方,但如果你想,你需要傳遞的實例MainsubMethod (和做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;
}

因此,您需要一種方法來更改另一個類的字段的值。 有幾種方法可以做到這一點。 如果你有這個課

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 in作為set方法的參數

 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;
     }
}

此外,如果你沒有方法setAB作為static你必須調用它的instanceB

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

好像它是靜態的,您可以在class B上調用它

B.setA(a, val);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM