I am reading "Practical API design" and find following paragraph:
"The other reason to prefer methods over fields can be found in the JVM specification. You’re permitted to move a method from a class to one of its superclasses and still maintain binary compatibility. So, a method initially introduced as Dimension javax.swing.JComponent. getPreferredSize(Dimension d) can be deleted in a new version and moved to Dimension java.awt.Component.getPreferredSize(Dimension d), as the JComponent is a subclass of Component. A change like this really happened in JDK 1.2, and this could be done only because the field was encapsulated by a method. An operation like this isn’t allowed for fields. Once a field is defined in a class, it has to stay there forever to maintain binary compatibility, which is another reason to keep fields private"
since I agree using getter/setter is better way. But I don't understand why moving public field to parent class will break binary compatibility? You should still be able to access that field through child class as long as the it is public in parent.