Лекция 10, задача 14.
Расставьте как можно меньше модификаторов static так, чтобы пример скомпилировался.
Требования:
1. В классе должна быть переменная A.
2. В классе должна быть переменная B.
3. В классе должна быть переменная C.
4. В классе должна быть переменная D.
5. Метод main не изменять.
6. Метод getA не изменять.
package com.javarush.task.task10.task1014;
/*
Расставьте минимум static-ов
*/
public class Solution {
public int A = 5;
public int B = 5; // static ???
public int C = 5; // static
public static int D = 5;
public static void main(String[] args) {
Solution solution = new Solution();
solution.A = 5;
solution.B = 5 * B;
solution.C = 5 * C * D;
Solution.D = 5 * D * C;
Solution.D = 5;
}
public int getA() {
return A;
}
}
Соответственно, к переменой D происходит обращение через класс, значит, она static. Дальше, переменная C задействуется переменной D, а т.к. статические переменные/методы работают только со статиками - С тоже static. Переменная A в данном случае может иметь любой модификатор (для соблюдения условий задачи ограничимся его отсутствием), из метода main происходит обращение к переменной A экземпляра класса, хорошо, понятно.
Переменная B никакими статиками не задействована, в классе main обращение происходит к переменной B экземпляра класса. Ошибка возникает после попытки присвоить переменной значение:
solution.B = 5 * B;
Причём, если мы напишем так, всё работает:
solution.B *= 5;
Очевидно, что это две разных операции, и вторая операция скорее похожа на это:
solution.B = 5 * solution.B;
Помогите разобраться, почему переменная B должна иметь модификатор static.