为什么Java中的实例变量总是私有的?
作者:互联网
我是Java的新手,我正在学习封装,并看到了一个示例,其中实例变量在类中声明为私有.
http://www.tutorialspoint.com/java/java_encapsulation.htm
我有2个查询:
>为什么实例变量是私有的?为什么不公开?
>如果实例变量公开并直接访问会怎样?我们看到任何限制吗?
你可以用一个例子来解释,如果在Java中的类中将实例变量声明为public,会出现什么问题?
解决方法:
实例变量是私有的,以强制这些类的用户使用方法来访问它们.
在大多数情况下,有普通的getter和setter,但也可以使用其他方法.
例如,使用方法可以限制对只读的访问,即如果没有setter,则可以读取但不写入字段.如果该领域是公开的,这是不可能的.
此外,您可以为字段访问添加一些检查或转换,这对于公共字段的普通访问是不可能的.如果某个字段是公开的,并且您以后想要通过执行其他检查等的某种方法强制所有访问.您必须更改该字段的所有用法.如果您将其设为私有,则只需稍后更改访问方法即可.
如果手机是私密的:
考虑这种情况:
class Address {
private String phone;
public void setPhone(String phone) {
this.phone = phone;
}
}
//access:
Address a = new Address();
a.setPhone("001-555-12345");
如果我们从这个类开始,之后需要对phoneNumber执行检查(例如,一些最小长度,仅数字等),您只需要更改setter:
class Address {
private String phone;
public void setPhone(String phone) {
if( !isValid( phone) ) { //the checks are performed in the isValid(...) method
throw new IllegalArgumentException("please set a valid phone number");
}
this.phone = phone;
}
}
//access:
Address a = new Address();
a.setPhone("001-555-12345"); //access is the same
如果手机是公开的:
有人可以设置这样的手机,你无法做任何事情:
Address a = new Address();
a.phone="001-555-12345";
如果您现在想要强制执行验证检查,则必须将其设为私有,并且无论是谁编写上述行都必须将第二行更改为:
a.setPhone("001-555-12345");
因此,您不能在不破坏其他代码的情况下添加检查(它将不再编译).
此外,如果通过方法访问类的所有字段/属性,则保持访问一致,用户不必担心属性是存储(即是实例字段)还是计算(只有方法而没有实例字段) ).
标签:java,instance-variables 来源: https://codeday.me/bug/20190923/1815105.html