首页 > 在面向对象编程中对对象内的私有属性操作是否应该使用getter和setter

在面向对象编程中对对象内的私有属性操作是否应该使用getter和setter

其实这不是只存在于java中的问题,所有oop语言都有这个疑惑,对初学者来说容易造成混乱。我用我熟知的java代码来举个例子

class Something {
    private int someNumber;

    public void testMethod() {
        // do this
        setSomeNumber(getSomeNumber() + 1);

        // or do this
        someNumber = someNumber + 1;
    }

    public void setSomeNumber(int someNumber) {
        this.someNumber = someNumber;
    }

    public int getSomeNumber() {
        return someNumber;
    }
}

在上面的testMethod代码中看到了我们常用的两种写法,对我这种菜鸟来说,影响你使用某种写法的原因可能只是你偶尔的心血来潮。

如果在外部使用这个对象,毫无疑问我们会使用setter和getter方法,但是在它自身内部呢?


用private 时意味着你要的是封装,当需要外部访问时就要使用public ,所以,内部还是用 this.来操作会符合面向对象的思想。


为什么把是否能外部访问作为使用set和get方法的原因?能给个实在的解释么?

我认为无论是外部还是内部,需要思考你在赋值或者读取此值的时候是否会做其他行为。比如,你在set或者get一个属性的时候,是否同时需要记录日志或者做其他判断。从这个角度来说,无论这个属性是否设计为外部能否访问,都最好用get或set方法。

对于一般的属性获取来说,最好都有get或者set方法来增强其灵活性,方便你以后改变读写属性方式的时候修改代码。当然有一些属性,你觉得是绝对不可能在读取/赋值操作的时候做其他事情,你就可以不用去费心单独写方法了。

另外使用set方法可以return this来实现influent interface,这也算是个用set方法的优点吧

【热门文章】
【热门文章】