大家快看! java中的一个封装漏洞!

hisenseme 2009-03-03 05:04:09

public boolean equals(Object otherObject){
if(this==otherObject)//首先判断是不是引用同一个对象
return true;
if(otherObject==null)//判断otherObject是不是null
return false;
if(getClass()!=otherObject.getClass())//判断是不是属于相同的类
return false;
Employee other=(Employee) otherObject;//强制类型转换
return name.equals(other.name)&&salary==other.salary&&hireDay.equals(other.hireDay);//注意此行
}


假设有一个Employee类,它有name,salary,hireDay三个private实例域。看上面的equals方法,最后一行怎么能用other.name , other.salary直接访问other对象的实例域???
...全文
145 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangsuwen 2009-03-03
  • 打赏
  • 举报
回复
.......................................................................................
读书读晕了吧 建议先休息几天
hisenseme 2009-03-03
  • 打赏
  • 举报
回复
刚才试了一下,
public void method(Object aManager){
other=(Manager) aManager;
this.setName(other.name);
}

假设method是一个Employee类的方法,那么上面的代码不能通过。提示other.name在Employee类中不可视。
谢谢各位大哥,发分,分虽不多,意思意思就行了。
yanhan0615 2009-03-03
  • 打赏
  • 举报
回复
看这个方法在哪里,如果在Manager类中是可以访问的,你先看看书,搞清楚修饰符的作用域
mimi_3935 2009-03-03
  • 打赏
  • 举报
回复
按照你提供的信息来看,这段代码,应该是编译不过去的.
有可能是因为你代码的其它方面问题,建议把代码贴全.

hisenseme 2009-03-03
  • 打赏
  • 举报
回复
那现在有个Manager类的对象other,比如有个方法这样:
public void method(Object aManager){
other=(Manager) aManager;
this.setName(other.name);
}
这样就不可以了是吧?小弟学术不精,望指点。
云上飞翔 2009-03-03
  • 打赏
  • 举报
回复
大家快看! java中的一个封装漏洞!
答: 呵呵... :)
小强提包包 2009-03-03
  • 打赏
  • 举报
回复
可以直接跟你说吧,
在A类中,访问A类对象是可以直接访问私有成员的,原理和C++的友元类是一个道理的。
hisenseme 2009-03-03
  • 打赏
  • 举报
回复
但是other是个Employee类的对象,那岂不是说另外的一个Employee类对象,假设staff吧,可以访问other的私有实例域。比如:staff.setName(other.name);???这样可以么?
axman 2009-03-03
  • 打赏
  • 举报
回复
这叫漏洞?在类内部访问自己的私有成员有什么漏洞?
Dan1980 2009-03-03
  • 打赏
  • 举报
回复
笑着飘过
MT502 2009-03-03
  • 打赏
  • 举报
回复
当然可以了,equals方法不就是在Employee类里定义的,当然看得到Employee类的私有成员
台城柳月 2009-03-03
  • 打赏
  • 举报
回复
public boolean equals(Object otherObject)
应该是Employee类自己重写Object的equals方法吧,
private难道可以限制自己访问自己的属性吗?
yanhan0615 2009-03-03
  • 打赏
  • 举报
回复
拜托,私有变量在该类内部是可以访问的~~~
createWang 2009-03-03
  • 打赏
  • 举报
回复
name.equals(other.name)&&salary==other.salary&&hireDay.equals(other.hireDay)

&& == && f

分开看吧,马上就理解了。
hisenseme 2009-03-03
  • 打赏
  • 举报
回复
《core java》上看来的,能通过编译。望高手指点。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧