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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄新灵 黑马帝   /  2011-10-6 22:59  /  2318 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我们都知道java面向对象,健壮性,封装性,因此类对象有着自己的属性和方法,但是通过反射机制可以获得一个类的属性和方法,就连private修饰的也可以获得,这样是不是破坏了健壮性,封装性???

3 个回复

正序浏览
反射并没有破坏类的封装性。”类是私有成员不能被外界直接访问“这句话是正确的,但反射中所说只是得到类的私有成员并没有说是访问类的私有成员。反射只是得到了私有成员并且这个得到的是私有成员的对象。
回复 使用道具 举报
封装,是将具体的实现细节隐藏,而把功能作为整体提供给类的外部使用,也就是说,公有方法能够完成类所具有的功能。当别人使用这个类时,如果通过反射直接调用私有方法,可能根本实现不了类的功能,甚至可能会出错,因此通过反射调用私有方法可以说是没有任何用处的,开发人员没有必要故意去破坏封装好的类。从这点上看,封装性并没有被破坏。
我认为反射机制只是提供了一种强大的功能,使得开发者能在封装之外,按照特定的需要实现一些功能。但是当对象封装不合理的的时候,迫不得已还是要用的,这样才会使程序更加完美。
存在即合理吧。

评分

参与人数 1技术分 +1 收起 理由
李印东老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 张校云 于 2011-10-6 23:19 编辑

封装是为了提供安全性,反射增强了java的功能,并不会威胁安全性。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马