当我们有访问器和mutator时,为什么要声明私有字段?

时间:2014-12-11 20:00:40

标签: java oop access-modifiers

如果我用Java创建一个类,我总是被告知惯例是使一个类的所有字段都是私有的。如果我需要访问或更改它们,我可以创建一个accessor和mutator方法。我确实理解私有变量的重要性,因为它们有助于降低复杂性并允许封装。

我不明白的是,如果我创建了一个公共访问者和mutator方法,那么那个变量是不是公共的?为什么在任何人都可以访问私有变量的情况下仍然使用私有变量?

我还应该注意,我理解这些方法的重要性,但我想知道为什么我们懒得将变量设为私有,即使我们通过这些方法让任何人都可以访问它?

2 个答案:

答案 0 :(得分:8)

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

如果您刚刚将变量设为公开,那么您将无法停止对该字段的写入而不会破坏该字段的读取。

它还有其他优点。例如,您可以在以后进行访问synchronized,而不会破坏客户端代码。简而言之,它允许稍后进行大量修改,否则就不可能在使用该类的代码中造成大量破坏。

并且您可以添加额外的逻辑,只要有人写入字段,或阻止某些线程写入,或任何...,您可以将字段的类型从HashMap更改为{{1如果你的getter将它抽象出去并且只返回一个TreeMap ......等等。

答案 1 :(得分:2)

私有字段被视为对象的内部字段。因此,外界不需要知道数据如何存储在对象内。这意味着您可以轻松更改对象数据的内部表示,而其他人仍然使用相同的访问者/更改器来完成其工作。

访问者/ mutator也可能执行验证以及对象内部所需的其他步骤,但您不希望暴露给使用该对象的代码。

您可以将所有字段设为公开但这会限制您在以后很多代码现在依赖于以某种方式命名的字段时更改对象内部结构的能力。