假设我有一个单独的 GUI 类,它有一个名为“guiWait”的公共布尔值,还有一个返回 guiWait 的布尔值方法。
有什么区别:
while(gui.guiWait)...
和
while(gui.getGuiWait())...
假设我有一个单独的 GUI 类,它有一个名为“guiWait”的公共布尔值,还有一个返回 guiWait 的布尔值方法。
有什么区别:
while(gui.guiWait)...
和
while(gui.getGuiWait())...
不同之处在于能见度。当您guiWait
public
像第一个示例一样使用时,外部调用者可以修改该值。如果您使用方法并创建变量private
,则调用者无法修改guiWait
变量(尽管如果它是可变的,他们可以修改它引用的对象)。此外,如果您习惯使用 getter 和 setter,那么以后如果您需要在获取或设置过程中添加逻辑(例如您需要从其他一些新字段派生值),您已经有了方法并且不会通过创建变量来破坏任何调用者的代码private
。因此,在 Java 中始终使用 getter 和 setter 被认为是“最佳实践”。
它是JAVA 中数据封装的纯粹概念。
一种语言机制,用于限制对某些对象组件的访问。
一种语言结构,有助于将数据与操作该数据的方法(或其他功能)捆绑在一起。
OOP 的核心概念是封装。使用 getter 和 setter 方法(例如,您的 getguiWait() 方法)以便没有人能够访问对象的内部字段。这样,其他人就无法将内部字段设置为不一致/异常的值。通过使用“getter”和“setter”方法(并使用 private 隐藏内部字段),您可以确保任何愿意设置或获取字段的人都必须通过您设置的检查。示例类 Cat 可以将年龄作为其字段。在 setter 方法中,您将检查用户输入值是否为负。如果您允许公开年龄字段,则有人可能会将其设置为负数,这是没有意义的。
如果 guiWait 是一个公共布尔值,那么为它使用“getter”方法是没有意义的。如果它是私有的或受保护的,那就另当别论了。private-getter 方法更加灵活,因为您可以更改“获取”该变量的实现,并在方法内添加检查或任何内容。私有 getter/setter 也使事情变得更清晰,并确定哪些东西应该被其他类看到,哪些只打算在它们所在的单个类中使用。如果您发现您确实需要特定成员变量的 getter(需要某种验证或检查),这很常见,那么仅针对该变量执行此操作将是不一致的。