Параметры в методах

250
26 ноября 2016, 19:15

Помогите разобраться, пожалуйста.

public class Math {
    private String a;
    void method() {
        this.a = "Hello";
    }
}

Вот есть переменная "а", я в нее передаю строку "Hello". И есть

public class Physics {
    void method1() {
        "и здесь мне нужно использовать переменную "а"
     String b = a + "world";
    }
}

Как это сделать? Когда создаю объект, получаю Null.

Answer 1

Когда вы используете метод method1 класса Physics, то вы, как минимум, создаете через оператор new создаете экземпляр указанного класса и обращаетесь к его методу ((!!!) если конечно метод не является статическим).

Соответственно, тоже самое должно касаться и класса Math и его метода method. Или, как минимум, передать new Math() как параметр в метод (если этот экземпляр потом не нужен будет).

Ибо когда вы пишите String b = a + "world";, то это значит, что идет попытка обращения к переменной a внутри этого самого класса (Physics). А так как её нет, то и ошибка.

public class Math {
    private String a;
    void method() {
        a = "Hello";
    }
    public String getA() {
        return a;
    }
}

public class Physics {
    void method1(Math math) {
        String b = math.getA() + "world";
    //    System.out.print(b);
    }
}

метод main может при этом выглядеть так:

new Physics().method1(new Math());

или

Math math = new Math();
Physics physX = new Physics();
physX.method1(math);

Почему мне кажется, что лучше передавать объект, а не создавать его экземпляр непосредственно в методе method1 ? Потому что могут быть, например, наследники от класса Math и вы захотите вызвать их реализацию метода method, которая будет отличаться от родительского. И при этом не придется постоянно переписывать метод method1 и писать различные условия на объекты различного типа.

Answer 2

Для начала, необходимо провести инициализацию класса Math, затем вызвать метод method, который установит значение a. Теперь, получается так, что извне у нас нет доступа к полю a, для этого создан метод get_a(), который и возвращает a

public class Math {
    private String a;
    public String get_a() {
        return this.a;
    }
    public void method() {
        this.a = "Hello";
    }
}
public class Physics {
    public void method1() {
        Math a = new Math();
        a.method();
        String b = a.get_a() + "world";
    }
}
READ ALSO
NavigationView различные itemTextColor

NavigationView различные itemTextColor

Имеется NavigationView в котором подключаю menu c items

306
Что не так с выводом массива? [дубликат]

Что не так с выводом массива? [дубликат]

На данный вопрос уже ответили:

305
Можно ли применять в Map двойной ключ?

Можно ли применять в Map двойной ключ?

Например, Map<String*, Integer> map = new TreeMap<String, Integer>();, там где * можно поставить < <String,String>, Integer > например?

319
как скрыть окно ошибки Winrar в Java

как скрыть окно ошибки Winrar в Java

Есть класс Java, который распаковывает архивы в каталогеЕсли архив поврежден, то открывается окно winrar с содержимым "Архив поврежден или имеет...

268