java - 当我们有访问器和修改器时,为什么要声明私有(private)字段?

标签 java oop access-modifiers

<分区>

如果我在 Java 中创建一个类,我总是被告知约定是将类的所有字段设为私有(private)。如果我需要访问或更改它们,我可以创建访问器和修改器方法。我确实理解私有(private)变量的重要性,因为它们有助于降低复杂性并允许封装。

我不明白的是,如果我创建一个公共(public)访问器和修改器方法,那么此时变量不是公开的吗?为什么在任何人都可以访问的情况下仍然习惯使用私有(private)变量?

我还应该指出,我理解这些方法的重要性,但我想知道为什么我们费心将变量设为私有(private),即使我们允许任何人通过这些方法访问它?

最佳答案

是的,你是对的,它确实有效地公开了变量。但有一个重要的区别,那就是它使您能够在以后进行更改:您可以根据需要删除 setter,或者将其设为私有(private),而不会影响使用 getter 从字段中读取的代码。

如果您只是将变量公开,您将无法在不中断对该字段的读取的情况下停止对该字段的写入。

它还有其他优点。例如,如果您以后想在不破坏客户端代码的情况下,可以使访问同步。简而言之,它允许以后进行大量修改,如果不在使用该类的代码中造成大量破坏,否则这些修改是不可能的。

并且您可以添加额外的逻辑,在有人写入该字段时记录日志,或阻止某些线程写入,或其他任何...您可以将字段的类型从 HashMap 更改为TreeMap 如果您的 getter 将其抽象化并返回一个 Map... 等等。

关于java - 当我们有访问器和修改器时,为什么要声明私有(private)字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27431373/

相关文章:

java - 将公共(public) API 转换为内部胶水代码时避免强制转换

c# - 如何在 .NET winforms 中公开 ListView?

Java类的组织

java - Flash WebSockets 后备和 Jetty 8?

java - 关于抛出异常的一些困惑

c# - 我应该在一般领域使用什么模式?

javascript - 在 javascript 原型(prototype)事件处理程序中保留 'this' 引用

java - 我需要帮助来编写一段代码,找出一个序列中两个整数之间的最大差异

java - 您的 SQL 语法有误;检查与您的 MySQL 服务器版本等对应的手册

c++ - 不能使用公共(public)嵌套类作为私有(private)方法参数