Imr*_*ran 7 c++ java oop computer-science programming-languages
我不理解OOP中的Access Modifiers.为什么我们在Java实例变量私有中使用,然后使用公共getter和setter方法来访问它们?我的意思是这背后的推理/逻辑是什么?
您仍然可以访问实例变量但是为什么在可以公开变量时使用setter和getter方法?
请原谅我的无知,因为我只是想了解为什么?
先感谢您.;-)
Tho*_*mas 11
这称为数据或信息隐藏.
基本上,你不希望用户(阅读:其他程序员或你自己)在你的课程内部戳,因为这使得改变事情变得非常困难.
另一方面,界面和实现之间的清晰分离(理论上)使得在内部更改内容变得容易,而不会影响任何类的用户.
例如,假设我有一个Button带public String text字段的控件.现在每个人都开始使用我的Button,但我意识到每当文本改变时,按钮实际上应该在屏幕上重新绘制.我运气不好,因为我的对象无法检测到何时text被分配.如果我做了它private并提供了一个setText()代替,我可以添加一个重绘调用该setter方法.
另一个例子,假设我有一些类在其构造函数中打开一个文件并将其分配给一个public FileStream file.如果无法打开文件,构造函数将引发异常.因此,类中的其他方法可以假定该字段始终有效.但是,如果有人在我的课堂上闲逛并设置file为null,我班上的所有方法都会突然崩溃.
一个常常被忽视很重要的一点:你没有有提供一个getter和每一个领域的二传手!实际上,大多数字段既不应该也不应该只有一个getter(使它们实际上是只读的).
拥有除私有属性和公共getter和setter之外的其他类的类与使用公共字段一样糟糕.这是一种称为贫血领域模型的反模式.关键是getter和setter允许你向模型添加行为和逻辑,而不是简单地保存数据 - 在许多情况下,这意味着没有getter或setter(或两者).