effettivamente dichiararlo public non è bello, al massimo dichiaralo static così puoi utilizzare sempre lo stesso

ma la dichiarazione di grafo è proprio quella che hai scritto?
"private Grafo grafo;"

senza inizializzazione? tipo
"private Grafo grafo = new Grafo ();"

prova magari con un bel
"this.grafo = g;"
che all'interno di un costruttore è sempre meglio anche se non so se cambi qualcosa!