Saving storage is a good enough reason in itself, I think. But it has already been discussed elsewhere in this thread:
This behavior of variable overloading is not self-evident. Long ago overloaded variables actually didn't share storage - each class got its own and the normal binding rules were applied to the identifier. Then the variable variety of your example would behave exactly as the constant case.
That was changed, if I recall correctly, mostly on pragmatic grounds: The only reason to overload a variable is either to modify its type or (more commonly) to override the initializer. In those cases, retaining the storage for the overloaded variable would just cause confusion (and hence bugs) and waste space in the objects.