黑马程序员技术交流社区

标题: 关于老师视频中私有的问题(已解决) [打印本页]

作者: 张明    时间: 2012-8-22 23:09
标题: 关于老师视频中私有的问题(已解决)
本帖最后由 张明 于 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合不合法不就行了吗
作者: 全海波    时间: 2012-8-22 23:22
你觉得那种好呀?
作者: 黑马王建伟    时间: 2012-8-22 23:25
这个,楼主好像还不是很清楚,属性私有化,为什么要私有化呢,就是不让随便调用,所以把属性私有化,然后为了操纵这个属性,再定义了该属性的get/set方法
其中,在set方法中加了个判断,只是让这个属性值更加符合我们的常识,
作者: 杨鹏鹏    时间: 2012-8-22 23:25
私有 安全啊,你传一个-1岁。如果 age 是 public ,那么不需要通过 setAge(int a),直接就把age设为-1,这样就出现了安全隐患
作者: 周世阳    时间: 2012-8-22 23:28
不私有的话就可以直接用类的实例.age来直接修改age的值了,而不通过setAge,也就不会判定age的值和不合法了,所以私有更安全,不能直接修改变量的值了
作者: 广驰    时间: 2012-8-22 23:48
这就是面向对象中的封装特性  将对象中的数据设置为private 使得外界程序不能直接访问这个变量 而是通过为这个变量提供两个public方法 供外部程序访问,这样可以增加程序的安全性
作者: 张_涛    时间: 2012-8-23 08:37
首先,成员变量私有,方法公开,这符合面向对象的封装特性。
其次,使用setAge这种方法,符合JavaBean的要求,在后面通过反射,就可以获得相应成员变量对应的操作方法。
等了解了框架就知道更多了。
作者: 张明    时间: 2012-8-23 09:15
杨鹏鹏 发表于 2012-8-22 23:25
私有 安全啊,你传一个-1岁。如果 age 是 public ,那么不需要通过 setAge(int a),直接就把age设为-1,这 ...

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

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

恩,我知道了,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2