JAVA——private+get/set方法与public的区别

//设置public
public int num1;

//设置private并提供set/get方法
private int num2;

public void setNum2(int num2){
    this.num2=num2;
}

public int getNum2(){
    return num2;
}
    

如果仅仅是上面的例子,那么这两种方式是没什么区别的。外部调用的结果都可以对属性进行读取与修改。

这个例子只是展示了一个常规的私有属性与 get/set 方法的使用模式,仅仅从这个例子中看不出来这个模式有什么好处。实际上,公共属性与私有属性的使用,还是有很大区别的:

  • 如果一个属性是 public,那么外部可以直接对这个属性进行读取与修改;
  • 如果一个属性是 private,那么外部不可以直接对这个属性进行读取与修改,而是通过这个类提供的 get、set 方法去访问。

也就是说,前者把控制权交给别人,而后者的控制权还在自己手中。我举几个简单的例子:

  • 比如说一个只读属性,可以提供 get 方法给外界调用读取,但是不允许修改,那么这时候可以不提供 set 方法,或者在 set 方法中抛出异常;
  • 比如我的数据格式与别人使用的格式不同,那么我可以在 get 与 set 方法中,加上进行格式转换的代码;
  • 比如我的数据可以被读取与修改,但是修改时候必须经过我的验证,那么我的 set 方法中会添加数据验证的代码。

private 目的是私有, 是不让别人用, get/set方法目的是让别人用. 这岂不矛盾了? 

是这样的.private 是不让别人用, public 是让别人用, 但是有一种需求是让有的人用而让另外一些人不能用. 这时private/public的功能就出现短板了. 这时就有了set/get方法的用武之地了. 我们可以在set/get方法是设置, 如下: 
public set(XXX){ 
         if(你是A){ 
             你可以设置.
         }

         else{ 
             对不起, 你没有设置的权限. 
         } 

例如:一个变量名称为num,我们希望所有对象的num都不是"123",这样我们就可以在setNum()方法中添加限制条件。

private int num;
 
public void setNum(int x){
    //设置限制条件
    if(x==123)
        System.out.println("num不可取123!")//报错,num属性修改失败
    else
        this.name=x;//修改成功
}

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值