我对getter和setter如何提供封装感到困惑。我的意思是直接为变量赋值和通过getter和setter分配它们之间的区别是什么。还可以说我们有两个A级和A级。 B.使用getter和setter来设置B类的值时,我们必须在B类中创建A类的对象,所以当我们已经知道它们在哪个类中被定义时,如何封装变量。
答案 0 :(得分:0)
您封装了声明它们private
的变量,因此其他类在没有getter或setter方法的情况下无法访问它们。例如:
private int num; //variable to-be defined from constructor
public int getNum(){
return num;
}
其他对象无法从此对象访问私有num
变量,而不使用getNum()
方法。
如果要更改封装变量:
public void changeNum(int n){
num = n;
}
num
变量在不破坏java语法的情况下进行了更改。
答案 1 :(得分:0)
使用setter,我们可以对指定的值应用额外的验证,这在您将值直接赋值给属性时是不可能的。例如,可以检查值是否为空,例如:
public void setVariable(Object value) {
if (value == null) {
throw new IllegalArgumentException();
} else {
...
}
}
使用setter获得的其他可能性是您可以应用额外的计算。例如,如果你有一个BankAccount实例并且你改变了兴趣,那么setter就可以重新计算必须支付给用户的利息。
通过应用getter获得的一种可能性是,如果尚未设置值,则可以返回默认值。
getter和setter的另一个设备正在限制对变量的访问。例如,我们可以在设置器受到保护时公开getter。这意味着每个人都可以读取属性,但只有扩展另一个类的类,或者在同一个包中的类可以设置该值。
关于你的第二个问题。我不完全理解这个问题。你能否详细说明一下。
答案 2 :(得分:0)
吸气剂是公共的,而制定者是私人的(通常)。这意味着任何对象都可以读取我们类的变量,但只有我们类的对象可以更改它们的值。这提供了封装,意思是“它不会给予其他对象更多的访问权限”。这是合乎逻辑的,因为说我们的班级是汽车而我们的对象是法拉利。比如说,新变量是法拉利的马力。只有法拉利制造商才能改变法拉利所赋予的马力价值。其他人只能阅读,而不是改变。
回答你的第二个问题,当A的一个物体出现时,你需要初始化A的所有(或至少一些)变量。这类似于,在上面的类比中,创造一辆新的法拉利汽车。一旦你创造了法拉利,你显然必须知道它的所有变量。此外,这里假设B类是一个“安全”类,比如Main。 B不能是梅赛德斯或奥迪。 (这是程序员需要照顾的东西,再次使用法拉利课程的公共/私人封装)梅赛德斯或奥迪课程将无权创建法拉利汽车。只有“主力”和“法拉利”才有。