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

你需要以某种方式给Alpha类引用cBeta。 有三种方法可以做到这一点。

1)在构造函数中给Alpha一个Beta。 在class级Alpha写道:

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

并从main()调用cAlpha = new Alpha(cBeta)

2)给阿尔法一个变种,给他们一个testing版。 在class级Alpha写道:

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

并调用cAlpha = new Alpha(); cAlpha.setBeta(testing版); 从main()或

3)有一个beta作为doSomethingAlpha的参数。 在课堂上写Alpha:

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

您使用哪种策略取决于几件事情。 如果你想让每一个Alpha都有一个testing版,请使用编号1.如果你只想要一些阿尔法有一个testing版,但是你希望他们无限期地保存它们的testing版,请使用编号2.如果你希望阿尔法只处理贝塔斯当您调用doSomethingAlpha时,请使用数字3.variables范围一开始是复杂的,但是当您掌握它的时候变得更容易。 让我知道如果你有任何问题!

方法1:

如果方法DoSomethingBeta是静态的,你只需要调用:

 Beta.DoSomethingBeta(); 

方法2:

如果Alpha从Beta版本扩展,你可以直接调用DoSomethingBeta()。

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

方法3:

或者,您需要访问Beta实例以从中调用方法。

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

顺便说一句,这是功课?

也许你需要一些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()); 

您可能需要在Alpha类或其方法中创build一个Betatypes的对象

就像你在这里做的主要Beta cBeta = new Beta();

如果你想使用你在Main中创build的variables,那么你必须通过使Alpha构造函数看起来像parsing成cAlpha作为参数

 public class Alpha { Beta localInstance; public Alpha(Beta _beta) { localInstance = _beta; } public void DoSomethingAlpha() { localInstance.DoSomethingAlpha(); } } 
 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()); 

我有另一个解决scheme。 如果Alpha和Beta是你唯一的额外类,那么为什么不用类的图像做一个静态variables。

像在Alpha类中一样:

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

现在你可以通过使用这些行来调用Beta类中的函数:

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