簡體   English   中英

Java:如何從另一個 class 訪問方法

[英]Java: How to access methods from another class

我試圖盡可能簡化我的困境。 我有三個班級:

Α:

public class Alpha {
     public void DoSomethingAlpha() {
          cbeta.DoSomethingBeta()  //?
     }
}

測試版:

public class Beta {
     public void DoSomethingBeta() {
          // Something
     }
}  

主要的:

public class MainApp {
     public static void main(String[] args) {           
          Alpha cAlpha = new Alpha();   
          Beta cBeta = new Beta();
     }
}

我希望我沒有過度簡化它。 我的問題是如何從 Alpha 中的方法訪問 cBeta.DoSomethingBeta()?

您需要以某種方式為 class Alpha 提供對 cBeta 的引用。 有三種方法可以做到這一點。

1) 在構造函數中給 Alphas 一個 Beta。 在 class Alpha 中寫入:

public class Alpha {
   private Beta beta;
   public Alpha(Beta beta) {
     this.beta = beta; 
   }

並從 main() 調用 cAlpha = new Alpha(cBeta)

2)給Alphas一個mutator,給他們一個beta。 在 class Alpha 中寫入:

public class Alpha {
   private Beta beta;
   public void setBeta (Beta newBeta) {
     this.beta = beta;
   }

並調用 cAlpha = new Alpha(); cAlpha.setBeta(beta); 從 main(),或

3) 有一個 beta 作為 doSomethingAlpha 的參數。 在 class 阿爾法寫:

public void DoSomethingAlpha(Beta cBeta) {
      cbeta.DoSomethingBeta()
}

您使用哪種策略取決於幾件事。 如果您希望每個 Alpha 都有一個 Beta,請使用數字 1。如果您希望只有一些 Alpha 擁有一個 Beta,但您希望他們無限期地持有他們的 Beta,請使用數字 2。如果您希望 Alpha 只處理 Beta當您調用 doSomethingAlpha 時,請使用數字 3。變量 scope 起初很復雜,但當您掌握它時會變得更容易。 如果您還有其他問題,請告訴我!

方法一:

如果 DoSomethingBeta 方法是 static 你只需要調用:

Beta.DoSomethingBeta();

方法二:

如果 Alpha 從 Beta 擴展而來,您可以直接調用 DoSomethingBeta()。

public class Alpha extends Beta{
     public void DoSomethingAlpha() {
          DoSomethingBeta();  //?
     }
}

方法三:

或者,您需要訪問 Beta 實例才能從中調用方法。

public class Alpha {
     public void DoSomethingAlpha() {
          Beta cbeta = new Beta();
          cbeta.DoSomethingBeta();  //?
     }
}

順便說一句,這是作業嗎?

public class WeatherResponse {

private int cod;
private String base;
private Weather main;

public int getCod(){
    return this.cod;
}

public void setCod(int cod){
    this.cod = cod;
}

public String getBase(){
    return base;
}

public void setBase(String base){
    this.base = base;
}

public Weather getWeather() {
    return main;
}

// default constructor, getters and setters
}

另一個 class

public class Weather {

private int id;
private String main;
private String description;

public String getMain(){
    return main;
}

public void setMain(String main){
    this.main = main;
}

public String getDescription(){
    return description;
}

public void setDescription(String description){
    this.description = description;
}

// default constructor, getters and setters
}

// 訪問方法
// 成功!

    Log.i("App", weatherResponse.getBase());
    Log.i("App", weatherResponse.getWeather().getMain());
    Log.i("App", weatherResponse.getWeather().getDescription());

我有另一個解決方案。 如果 Alpha 和 Beta 是您唯一的額外 class 那么為什么不使用 class 的圖像創建一個 static 變量。

就像在阿爾法 class 中一樣:

public class Alpha{
        public static Alpha alpha;
        public Alpha(){
                this.alpha = this;
}

現在您可以使用以下幾行代碼在 Beta class 中調用 function:

new Alpha();
Alpha.alpha.DoSomethingAlpha();

您需要在 Alpha class 或其方法中創建一個 Beta 類型的 object

就像您在 Main Beta 中所做的那樣 cBeta = new Beta();

如果要使用在 Main 中創建的變量,則必須通過使 Alpha 構造函數看起來像將其解析為 cAlpha 作為參數

public class Alpha 
{

    Beta localInstance;

    public Alpha(Beta _beta)
    {
        localInstance = _beta;
    }


     public void DoSomethingAlpha() 
     {
          localInstance.DoSomethingAlpha();     
     }
}

也許你需要一些依賴注入

public class Alpha {

    private Beta cbeta;

    public Alpha(Beta beta) {
        this.cbeta = beta;
    }

    public void DoSomethingAlpha() {
        this.cbeta.DoSomethingBeta();
    }
}

接着

Alpha cAlpha = new Alpha(new Beta());   

暫無
暫無

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

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