java get/set方法好处

问题:实例类中定义一个privata变量,然后为这个私有变量加上get/set方法。那为什么不直接定义一个public变量呢?

类中的属性使用set/get方法的作用,我理解的如下:
**

关键:在于public和private的区别,在类外部通过new 类的方法没法访问private变量,这才是关键。

**
下面的好处都是定义一个public get/set(读/写) ,方便外部访问的好处,不是抛出问题的关键。

1、灵活性
例1:比如我们有一个Person类,我们给它设置一个属性name,但是我们希望在取名字的时候,不是只显示名字,而是把名字按我们的要求输出,比如”我的名字叫XX”,代码如下:

public class Person {
    private String name;
 
    public String getName() {
        return "我的名字叫" + name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}

如上代码,以后我们只要定义一个person对象,并给他setName(xx),再getName的时候,就会显示我的名字叫XX。在实际业务中还可以有更灵活的运用,这里就不举例了。

例2:有人说如果你的变量score代表的是一个学生的数学成绩,理论上,分数只可能是0-100的整数,如果你把将score设为public,不用get()和set(),那么用户很可能会输入1-100以外的数字,如果你把将score设为privata,再用setScore()来设置分数,你就完全可以控制这种行为了。

2、安全性
比如我们的操作系统在新建用户或在共享文件的时候,经常会提示对针对某个用户的权限是什么,是只读还是只写还是可读写,这里的读写就好比get/set。对于类来说,如果不使用set/get方法,直接用public定义某个属性,那么这个属性是可读可写的,如果你希望一个类的某个属性是只能读取,不能写入的时候,上面用public定义某个属性就不能满足了,但是我们可以使用private定义属性,再定义一个get方法,但是不定义set方法来实现。反之,只定义set,不定义get则表示该属性是只写不能读的。举个简单的例子,如下代码。

public class Circle {
    private double radius;
    
    private double pai = 3.14;
 
    public double getPai() {
        return pai;
    }
 
    public void setRadius(double radius) {
        this.radius = radius;
    }
    
    /**
     * 计算周长
     */
    public double getC() {
        return 2*pai*radius;
    }
}

我们定义了一个圆类,定义了属性半径和pai,半径我只提供写的方法,但是不提供读,而pai只提供读,但不能写,并提供了一个计算周长的方法getC。在实际项目中,对一些类的设计时,严谨的设计是要考虑哪些类是只读或是只写的。

这作用表面上可以,但是有些牵强,可以说引偏了。原因是引入Circle实例后还是可以直接操作变量啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值