I spent quite a while thinking this over for the Java case, and I believe the real reasons are:
- Code to the interface, not the implementation
- Interfaces only specify methods, not fields
In other words, the only way you can specify a field in an interface is by providing a method for writing a new value and a method for reading the current value.
Those methods are the infamous getter and setter....