我知道这是非常基本的,但我想知道为什么我们应该在封装中使用私有变量。我提到了我的代码。所以我可以给你更好的解释。
Class Employee
{
private String eName;
public String getEname()
{
return this.eName;
}
public void setEname(String name)
{
this.eName=name;
}
这里“eName”是私有的,所以我们可以限制外部对象直接访问。变量只能使用其getter setter进行访问。
现在我的问题是为什么我们应该使用getter setter方法?我们不能将变量声明为公众。?
使用setter方法,任何人都可以更改该值,以便需要这个私有变量吗?
另一个问题
我们设置create read / write only方法如果我们不创建getter方法然后它变成只写,如果我们不创建setter方法那么它变成只读。
那么只读和只写的用途是什么?
如果我们不创建setter方法那么值将如何设置为变量?
如果我们不创建getter方法那么值将如何检索?
请给我上述简单问题的答案。
谢谢 :)
答案 0 :(得分:1)
制作变量private
和
假设您的bankBalance
是private
变量而checkBalance()
是public
方法,它为{{1}调用公共getter方法getbankBalance()
}。
现在,我可以调用bankBalance
来调用checkBalance()
函数并读取getbankBalance()
的值。我只能通过公共方法只读取敏感数据。
现在,如果变量bankBalance
是bankBalance
,任何功能都可以访问并更改银行余额的值,我可以检查public
变量,然后我可以更改该变量为0。
为了提供只读/写访问,我们需要创建变量packageName.ClassName.bankBalance
。
因此在公共方法中需要私有变量。
希望这是一个很好的解释。
答案 1 :(得分:0)
如果我们将该方法声明为公开,那么其他人可以更改其值。有时,在封装中,您不希望更改值,但只能被看到。 public
成员可以被阅读,也可以被更改。因此,您声明它为private
。
那么只读和只写的用途是什么?
我很少看到只写,但只读是常见的,例如,在银行帐户软件中。您希望读取帐户余额,但不能更改!
如果我们不创建setter方法,那么值将如何设置为变量?
obj.eName = "Whatever";
如果我们不创建getter方法,那么值将如何检索?
whatever = obj.eName;
答案 2 :(得分:0)
在setter中我们可以验证设置为property的输入数据并采取相应的操作,请参阅下文:
public void setEname(String name)
{
//Here we can validate input data or even throw an exception
if(name!=null && name.length()<5){
this.eName="Some Default Value";
//throw new IllegalArgumentException("Your custom message goes here");
}else{
this.eName=name;
}
}
此外,许多api使用java反射来设置私有属性值,因为这种setter方法是必需的。
答案 3 :(得分:0)
现在我的问题是为什么我们应该使用getter setter方法?我们不能 将变量声明为公共。?
使用setter方法任何人都可以根据需要更改值 这个私有变量?
您的类的公共和受保护方法构成其导出的API 的一部分,即您与类的客户用户签订的合同,用于指定您的类的功能。换句话说,可访问的方法指定了您的班级行为。
yout类的字段形成 state 。一个阶级的州不需要,也往往不依赖于其合同。换句话说,隐藏在课堂中的字段构成了课程实施的一部分(但不包括其行为或合同)。
请注意,实现的隐藏部分不是合同的一部分,也不是导出API的一部分。这意味着只要实施继续遵守您导出的API的合同,您就可以随时更改实施,而不会有破坏客户端程序的风险。因此,构成对象状态的字段几乎总是应该是私有的或包私有的。
当您将字段公开时,所有这些都会发生变化。在这种情况下,客户可以直接访问您的类的状态,因此它现在成为导出的API的一部分。将字段公开使您的实现成为合同的一部分,因此现在您不再可以自由地对其中的那一部分进行任何更改。只要您的班级存在,您就必须继续支持该公共变量。