Es que no deberia modificar nada en ESE programa. El modificador final sirve para proteger variables para que no sean malusadas cuando necesitas usar herencia. Por ejemplo, si muchas variables de clases criticas asociadas al SO no fueran final, cualquier persona podria modificarlas y usar de forma indebida procesos criticos. Me explico? Prueba esto y veras la diferencia:
public class padre {
protected final int x;
public padre()
{
x=5;
}
}
public class hija extends padre {
public static void main
(String[]args
) {
hija h=new hija();
h.main();
}
public void main()
{
}
}
Si intentas modificar la variable declarada como final, el compilador te tira un error "padre.x cannot be assigned or modified". En cambio, si borras el final, podras modificarla a gusto. Ese es el trabajo de FINAL.