Подтвердить что ты не робот

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?

4b9b3361

Ответ 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();