【发布时间】:2012-04-18 13:36:22
【问题描述】:
我正在阅读“实用 API 设计”并找到以下段落:
"在 JVM 规范中可以找到更喜欢方法而不是字段的另一个原因。您可以将方法从类移动到其超类之一,并且仍然保持二进制兼容性。因此,方法最初作为 Dimension javax.swing.JComponent.getPreferredSize(Dimension d) 引入的新版本可以删除并移至 Dimension java.awt.Component.getPreferredSize(Dimension d),因为 JComponent 是 Component 的子类。A这样的变化在JDK 1.2中确实发生过,之所以能做到,只是因为字段被方法封装了。这样的操作是不允许对字段进行的。一旦在类中定义了字段,它就必须永远留在那里保持二进制兼容性,这是保持字段私有的另一个原因“
因为我同意使用 getter/setter 是更好的方法。但我不明白为什么将公共字段移动到父类会破坏二进制兼容性?只要它在父类中是公共的,您仍然应该能够通过子类访问该字段。
【问题讨论】:
标签: java getter-setter binary-compatibility