这个问题在这里已有答案:
好的,所以我发现如果你有一个带有全局变量的类,你可以通过说class.variable在另一个类中调用它,现在我很困惑为什么getVariable和setVariable方法在它们已经可访问时存在
所以我们说我们有这两个类
public class MyClass {
public int num;
public String str;
public MyClass (int num, String str) {
this.num = num;
this.str = str;
}
public int getNum () {
return num;
}
public String getStr () {
return str;
}
}
public class test {
public static void main (String[] args) {
MyClass x = new MyClass (3, "string");
System.out.println(x.num);
System.out.println(x.str);
System.out.println(x.getNum());
System.out.println(x.getStr());
x.num = 4;
System.out.println(x.num);
}
}
两种方式,它从对象访问相同的数据并输出相同的东西。是一种比另一种方式更好的做法还是在某些情况下其中一种方法不起作用?
简短的回答:封装。
一个主要的好处是防止其他类或模块,特别是你不写的类,滥用你创建的类的字段。
比如说你可以使用一个实例变量int作为你的一个类方法中的分母。您知道在编写代码时从不将此变量赋值为0,您甚至可以在构造函数中进行一些检查。问题是其他一些人可能会实例化你的类,然后为实例变量赋值为0,从而在以后调用使用此变量作为分母的方法时抛出异常(你不能除以0)。
使用setter,您可以编写代码来保证此变量的值永远不会为0。
另一个优点是,如果您想在实例化类之后只读取实例变量,那么您可以将变量设为私有,并且只定义getter方法而不定义setter。