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