A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张明 中级黑马   /  2012-8-22 23:09  /  2634 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张明 于 2012-8-23 09:16 编辑

老师源代码部分:
private int age;
public void setAge(int a)
{
    if(a>0 && a<130)
    {
          age = a;
          speak();
    }
     else
          s.o.p("非法age")
}

这样的话,因为加上了一个if判断语句,私不私有还有什么区别呢?
私有,用a接收,判断a合不合法
不私有,用age接收,那判断age合不合法不就行了吗

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

10 个回复

倒序浏览
你觉得那种好呀?
回复 使用道具 举报
这个,楼主好像还不是很清楚,属性私有化,为什么要私有化呢,就是不让随便调用,所以把属性私有化,然后为了操纵这个属性,再定义了该属性的get/set方法
其中,在set方法中加了个判断,只是让这个属性值更加符合我们的常识,
回复 使用道具 举报
私有 安全啊,你传一个-1岁。如果 age 是 public ,那么不需要通过 setAge(int a),直接就把age设为-1,这样就出现了安全隐患
回复 使用道具 举报
不私有的话就可以直接用类的实例.age来直接修改age的值了,而不通过setAge,也就不会判定age的值和不合法了,所以私有更安全,不能直接修改变量的值了
回复 使用道具 举报
这就是面向对象中的封装特性  将对象中的数据设置为private 使得外界程序不能直接访问这个变量 而是通过为这个变量提供两个public方法 供外部程序访问,这样可以增加程序的安全性
回复 使用道具 举报
张_涛 黑马帝 2012-8-23 08:37:10
7#
首先,成员变量私有,方法公开,这符合面向对象的封装特性。
其次,使用setAge这种方法,符合JavaBean的要求,在后面通过反射,就可以获得相应成员变量对应的操作方法。
等了解了框架就知道更多了。
回复 使用道具 举报
张明 中级黑马 2012-8-23 09:15:06
8#
杨鹏鹏 发表于 2012-8-22 23:25
私有 安全啊,你传一个-1岁。如果 age 是 public ,那么不需要通过 setAge(int a),直接就把age设为-1,这 ...

age是直接设置成了-1,但在判断语句哪里会输出非法啊
回复 使用道具 举报
张明 中级黑马 2012-8-23 09:16:11
9#
张_涛 发表于 2012-8-23 08:37
首先,成员变量私有,方法公开,这符合面向对象的封装特性。
其次,使用setAge这种方法,符合JavaBean的要 ...

嗯,好的,谢谢
回复 使用道具 举报
我给楼主举一个例子说明一下,你就明白了,我们传一个负5,当你没有私有化的时候,就如你所说直接用age接收判断,那么age是不是先接收了-5这个值,再作判断?也就是说这个时候的age等于-5了,如果这个时候有用户突然调用age值查看,是-5,那还不吓人一大跳?而如果你私有化了,那么-5这个值是先传给a,再作判断,而不是直接传给age,判断一看不属于0~130的区间,那么,它是不会赋值给age的,只有属于0~130的正常区间,才会赋值给age,那么无论何时调用age值查看,都是正常的,这就是私有化的好处,安全性大大提高。
回复 使用道具 举报
翁发达 发表于 2012-8-23 09:20
我给楼主举一个例子说明一下,你就明白了,我们传一个负5,当你没有私有化的时候,就如你所说直接用age接收 ...

恩,我知道了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马