2011-07-04 48 views
21

我試圖儘可能簡化我的困境。我有三類:Java:如何從另一個類訪問方法

阿爾法:

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

Beta版:

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()?

+0

你肯定是過於簡單化了。 Alpha沒有引用cbeta,DoSomethingBeta被定義爲一個構造函數等。究竟是什麼不適合你? – g051051

回答

27

您需要以某種方式給Alpha類引用cBeta。有三種方法可以做到這一點。

1)在構造函數中爲Alpha提供一個測試版。在課堂上寫字母:

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

,並呼籲CALPHA =從主要的新的Alpha(CBETA)()

2)給阿爾法賦值函數,給他們一個測試版。在類Alpha中寫:

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

and call cAlpha = new Alpha(); cAlpha.setBeta(測試版);從main()或

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

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

你使用哪種策略取決於幾件事情。如果你想讓每一個Alpha都有一個測試版,請使用編號1.如果你只想要一些阿爾法有一個測試版,但是你希望他們無限期地保存它們的貝塔斯,請使用編號2.如果你希望阿爾法只處理貝塔斯當你打電話給doSomethingAlpha時,使用數字3.變量範圍起初很複雜,但當你掌握它的時候變得更容易。如果您還有其他問題,請告訴我!

+0

謝謝,我認爲第三個人不會跟我的案子一起工作,但是第一個人應該可以工作。我應該把這個,但「Alpha」和「Beta」創建不同的JFrames。 「Alpha」有一個複選框,「Beta」需要知道它是否被選中。 – co757

0

要麼你需要創建的阿爾法類類型測試版的對象或其方法

就像你在主Beta版CBETA =新的測試版在這裏做的();

如果你想通過阿爾法構造的樣子

public class Alpha 
{ 

    Beta localInstance; 

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


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

使用你在你的主創建變量,那麼你必須把它解析到CALPHA作爲參數,也許你需要一些dependency injection

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()); 
14

方法1:

如果該方法DoSomethingBeta是靜態的,你只需要調用:

Beta.DoSomethingBeta(); 

方法2:

如果阿爾法從Beta擴展,你可以調用DoSomethingBeta()直接。

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

方法3:

或者你需要能夠訪問測試版的一個實例,從它調用的方法。

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

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

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

另一個類

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()); 
0

我有另一種解決方案。如果Alpha和Beta是你唯一的額外類,那麼爲什麼不用類的圖像做一個靜態變量。

像阿爾法類:

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

現在,您可以通過只使用這些線路呼叫處於Beta類的功能:

new Alpha(); 
Alpha.alpha.DoSomethingAlpha(); 
相關問題