「実用的な API 設計」を読んでいて、次の段落を見つけました。
"フィールドよりもメソッドを優先するもう 1 つの理由は、JVM 仕様にあります。メソッドをクラスからそのスーパークラスの 1 つに移動しても、バイナリ互換性を維持することが許可されています。そのため、Dimension javax.swing として最初に導入されたメソッド.JComponent.getPreferredSize(Dimension d) は、JComponent が Component のサブクラスであるため、新しいバージョンでは削除され、Dimension java.awt.Component.getPreferredSize(Dimension d) に移動されます。このような変更は、JDK 1.2 で実際に行われました。これは、フィールドがメソッドによってカプセル化されたためにのみ実行できます. このような操作はフィールドには許可されていません. 一度フィールドがクラスで定義されると、バイナリ互換性を維持するために永遠にそこにとどまる必要があります. これは別の理由です.フィールドを非公開にする」
ゲッター/セッターを使用する方が良い方法であることに同意するからです。しかし、パブリック フィールドを親クラスに移動するとバイナリ互換性が失われる理由がわかりません。親でパブリックである限り、子クラスを介してそのフィールドにアクセスできるはずです。