Méthodes statiques Java accédant aux variables privées

J'étais sous l'impression que privé non statiques et variables, peuvent n'être accessibles que par des méthodes appelée sur l'objet que les variables se trouvent dans, mais ce n'est pas le cas. Quelqu'un pourrait-il expliquer le raisonnement derrière pourquoi la suivante compile et s'exécute?

public class Sandbox {
    private String _privateString = "unmodified";
    public static void setPrivateString(String str, Sandbox s) {
        s._privateString = str;
    }
    public String toString()
    {
        return _privateString;
    }

    public static void main(String[] args) {
        Sandbox s = new Sandbox();
        setPrivateString("modified", s);
        System.out.println(s);
    }
}

De sortie:

modified

EDIT: La même chose est vraie en C#.

source d'informationauteur T.K.