Java: как получить доступ к методам из другого класса - PullRequest
29 голосов
/ 05 июля 2011

Я пытался максимально упростить свое затруднительное положение. У меня есть три класса:

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 () из метода в Альфа?

Ответы [ 6 ]

31 голосов
/ 05 июля 2011

Вам нужно как-то дать классу Alpha ссылку на cBeta.Есть три способа сделать это.

1) Дайте Альфе Бета в конструкторе.В классе 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.в классе Альфа напишите:

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

Какая стратегия вы используете, зависит от нескольких вещей.Если вы хотите, чтобы у каждой Альфы была Бета, используйте номер 1. Если вы хотите, чтобы только у некоторых Альф была Бета, но вы хотите, чтобы они держали свои Беты бесконечно, используйте номер 2. Если вы хотите, чтобы Альфы имели дело только с Бетамив то время как вы звоните doSomethingAlpha, используйте номер 3. Поначалу область видимости переменной сложна, но становится легче, когда вы освоите ее.Дайте мне знать, если у вас есть еще вопросы!

17 голосов
/ 05 июля 2011

Метод 1:

Если метод DoSomethingBeta был статическим, вам нужно только вызвать:

Beta.DoSomethingBeta();

Метод 2:

Если Alpha выходит из 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 голосов
/ 23 августа 2016

У меня есть другое решение.Если Alpha и Beta - ваш единственный дополнительный класс, то почему бы не создать статическую переменную с изображением класса.

Как в классе Alpha:

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

Теперь вы можете вызывать функциюв бета-классе, просто используя эти строки:

new Alpha();
Alpha.alpha.DoSomethingAlpha();
0 голосов
/ 03 июня 2015
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 голосов
/ 05 июля 2011

Может быть, вам нужно внедрение зависимости

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());   
0 голосов
/ 05 июля 2011

Вам нужно либо создать объект типа Beta в классе Alpha, либо его метод

Как вы делаете это здесь, в Main Beta cBeta = new Beta ();

Если вы хотитечтобы использовать переменную, которую вы создаете в вашем Main, вы должны проанализировать ее в cAlpha как параметр, сделав конструктор Alpha похожим на

public class Alpha 
{

    Beta localInstance;

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


     public void DoSomethingAlpha() 
     {
          localInstance.DoSomethingAlpha();     
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...