我不了解 OOP 中的访问修饰符。例如,为什么我们在 Java 实例变量中将实例变量设为私有(private),然后使用公共(public) getter 和 setter 方法来访问它们?我的意思是这背后的推理/逻辑是什么?
您仍然可以访问实例变量,但是既然可以公开变量,为什么还要使用 setter 和 getter 方法呢?
请原谅我的无知,因为我只是想了解为什么?
提前致谢。 ;-)
最佳答案
这称为数据或 information hiding .
基本上,您不希望用户(读作:其他程序员或您自己)窥探您的类的内部结构,因为这使得更改内容变得非常困难。
另一方面,接口(interface)和实现之间的清晰分离(理论上)使得在内部更改某些内容变得容易,而不会影响您的类的任何用户。
例如,假设我有一个带有 public String text
字段的 Button
控件。现在每个人都开始使用我的 Button
,但我意识到只要文本发生变化,按钮实际上应该重新绘制在屏幕上。我运气不好,因为我的对象无法检测到 text
何时被分配。如果我将其设置为 private
并提供了一个 setText()
,我就可以向该 setter 方法添加一个重绘调用。
作为另一个例子,假设我有一些类在其构造函数中打开一个文件并将其分配给一个public FileStream 文件
。如果无法打开文件,构造函数将抛出异常。因此,该类中的其他方法可以假定该字段始终有效。但是,如果有人在我的类中四处寻找并将 file
设置为 null
,我类中的所有方法都会突然开始崩溃。
关于java - 面向对象编程中的访问修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2428355/