Использование геттера/сеттера, отличного от открытого поля, для бинарной совместимости?

Я читаю «Практический дизайн API» и нахожу следующий абзац:

«Другую причину предпочтения методов полям можно найти в спецификации JVM. Вам разрешено переместить метод из класса в один из его суперклассов и при этом сохранить бинарную совместимость. Итак, метод, изначально представленный как Dimension javax.swing.JComponent. getPreferredSize(Dimension d) можно удалить в новой версии и переместить в Dimension java.awt.Component.getPreferredSize(Dimension d), поскольку JComponent является подклассом Component. Подобное изменение действительно произошло в JDK 1.2, и это можно было сделать только потому, что поле было инкапсулировано методом. Подобная операция не разрешена для полей. Как только поле определено в классе, оно должно оставаться там навсегда, чтобы поддерживать бинарную совместимость, что является еще одной причиной держать поля закрытыми"

, так как я согласен, что использование геттера/сеттера лучше. Но я этого не делаю. Если вы не понимаете, почему перемещение общедоступного поля в родительский класс нарушит двоичную совместимость, вы все равно должны иметь доступ к этому полю через дочерний класс, если оно является общедоступным в родительском классе.

5
задан zx_wing 4 April 2012 в 19:31
поделиться