Dlaczego metody które nie są zadeklarowane jako statyczne, mogą zwracać wartość z pól statycznych?

0

Czy mógłby mi ktoś wyjaśnić, dlaczego metody które nie są zadeklarowane jako statyczne, mogą zwracać wartość z pól statycznych?

public class Solution {

    public static int A = 5;
    public static int B = 2;

    public int C = A * B;
    public static int D = B * A;

    public static void main(String[] args) {


        Solution solution = new Solution();


        System.out.println(solution.getValue());

    }

    public int getValue() {

        return A;
    }

    int getValue2() {
        return C;
    }
}
5

A dlaczego by miało być inaczej?
Składowe statyczne "należą" do klasy, więc należą do wszystkich obiektów klasy (w jednej sztuce, więc wartość jest współużywana *) )
Z danymi jest prościej niż z metodami statycznymi, przy metodzie zawsze można się doktoryzować "jakiego this ma użyć metoda?" (odp brzmi: żadnego)

Dodam tylko, ze dobre IDE, dobre wtyczki do kompilatora dadzą ostrzeżenie na użycie instancji obiektu
solution.A
a pozytywne będzie użycie nazwy klasy
Solution.A

*) z twoim kodem jest drobny problem, ze A i B nie są zabezpieczone przed zmianą, czyli może zajść coś złego. Niemal zawsze się pisze:
public static final int A = 5;

1 użytkowników online, w tym zalogowanych: 0, gości: 1