Лекция 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.