Java: как обращаться к методам из другого класса
Я старался максимально упростить свое затруднительное положение. У меня есть три класса:
Alpha:
public class Alpha {
public void DoSomethingAlpha() {
cbeta.DoSomethingBeta() //?
}
}
Бета:
public class Beta {
public void DoSomethingBeta() {
// Something
}
}
Main:
public class MainApp {
public static void main(String[] args) {
Alpha cAlpha = new Alpha();
Beta cBeta = new Beta();
}
}
Надеюсь, я не упростил это. Мой вопрос: как мне получить доступ к cBeta.DoSomethingBeta() из метода в Alpha?
Ответы
Ответ 1
Вам нужно как-то дать классу Alpha ссылку на cBeta. Существует три способа сделать это.
1) Дайте Alpha Beta в конструкторе. В классе Alpha напишите:
public class Alpha {
private Beta beta;
public Alpha(Beta beta) {
this.beta = beta;
}
и вызовите cAlpha = new Alpha (cBeta) из main()
2) дают Alphas мутатор, который дает им бета-версию. В классе Alpha напишите:
public class Alpha {
private Beta beta;
public void setBeta (Beta newBeta) {
this.beta = beta;
}
и вызовите cAlpha = new Alpha(); cAlpha.setBeta(бета); из main() или
3) имеют бета как аргумент doSomethingAlpha. в классе Alpha напишите:
public void DoSomethingAlpha(Beta cBeta) {
cbeta.DoSomethingBeta()
}
Какую стратегию вы используете, зависит от нескольких вещей. Если вы хотите, чтобы у каждой альфы была бета-версия, используйте номер 1. Если вы хотите, чтобы у некоторых Alphas была бета-версия, но вы хотите, чтобы они держали их бета-версии на неопределенный срок, используйте номер 2. Если вы хотите, чтобы Alphas имел дело только с бета-версиями в то время как вы вызываете doSomethingAlpha, используйте номер 3. Область переменной сначала сложна, но становится легче, когда вы получаете ее. Дайте мне знать, если у вас есть еще вопросы!
Ответ 2
Метод 1:
Если метод DoSomethingBeta был статичным, вам нужно только позвонить:
Beta.DoSomethingBeta();
Метод 2:
Если Alpha простирается от бета-версии, вы можете напрямую вызвать DoSomethingBeta().
public class Alpha extends Beta{
public void DoSomethingAlpha() {
DoSomethingBeta(); //?
}
}
Способ 3:
В качестве альтернативы вам нужно иметь доступ к экземпляру Beta, чтобы вызывать методы из него.
public class Alpha {
public void DoSomethingAlpha() {
Beta cbeta = new Beta();
cbeta.DoSomethingBeta(); //?
}
}
Кстати, это домашнее задание?
Ответ 3
Вам либо нужно создать объект типа Beta в классе Alpha, либо его метод
Как вы здесь, в главной бета-версии cBeta = new Beta();
Если вы хотите использовать переменную, которую вы создаете в своем Main, тогда вы должны проанализировать ее на cAlpha в качестве параметра, сделав конструктор Alpha похожим на
public class Alpha
{
Beta localInstance;
public Alpha(Beta _beta)
{
localInstance = _beta;
}
public void DoSomethingAlpha()
{
localInstance.DoSomethingAlpha();
}
}
Ответ 4
Возможно, вам понадобится инъекция зависимостей
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());
Ответ 5
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());
Ответ 6
У меня есть другое решение. Если Alpha и Beta - ваш единственный дополнительный класс, то почему бы не сделать статическую переменную с изображением класса.
Как в классе Alpha:
public class Alpha{
public static Alpha alpha;
public Alpha(){
this.alpha = this;
}
Теперь вы можете вызвать функцию в классе Beta, просто используя следующие строки:
new Alpha();
Alpha.alpha.DoSomethingAlpha();