PErché non hai capito gran ché del suggerimento di R@ve
codice:
class TestClass1 {
    private int visibile;
    public TestClass1 (int v) {
        this.visibile = v;
    }
    public String toString() {
        return ("Valore di \"visibile\": " + this.visibile);
    }
}

class TestClass2 {
    private int visibile;
    public TestClass2 (int v) {
        int visibile = v;
    }
    public String toString() {
        return ("Valore di \"visibile\": " + this.visibile);
    }
}

public class TestScope {
    
    public static void main (String[] args) {
        System.out.println(new TestClass1(10));
        System.out.println(new TestClass2(5));
    }
    
}
Provare per credere, visibile viene aggiornata al valore e stampata correttamente nella prima classe, mentre lo stesso "non avviene", nel secondo caso, visto che il costruttore crea una copia locale di visibile e la variabile con scope classe non viene toccata.