何时应使用 get 方法与直接调用变量



好的,所以我刚刚发现,如果你有一个带有全局变量的类,你可以通过说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。

相关内容

  • 没有找到相关文章

最新更新