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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李利威 中级黑马   /  2014-8-8 15:48  /  1287 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public boolean equals(Object obj)
{
        if(!(obj instanceof Person1))
                throw new RuntimeException("类型输入异常!!");
        Person1 p=(Person1)obj;
        return this.name.equals(p.name)&&this.age==p.age;
}
我不解的是equals中类与类之间的内容比较,我私有了name和age,为什么可以直接使用name和age,不需要调用方法区访问吗???

4 个回复

倒序浏览
同不解!
回复 使用道具 举报
core java 中写道:一个方法可以访问所属类的所有对象的私有数据。因此equals方法不仅可以访问本对象this中的name与age属性,同时可以访问obj对象的name与age属性。

1.JPG (81.63 KB, 下载次数: 2)

1.JPG
回复 使用道具 举报
ddewym123 发表于 2014-8-8 17:23
core java 中写道:一个方法可以访问所属类的所有对象的私有数据。因此equals方法不仅可以访问本对象this中 ...

谢谢你的回答!!感觉是有点懂了!!但又觉得有点抽象,在具体点就好
回复 使用道具 举报
本帖最后由 yqj 于 2014-8-8 20:53 编辑

因为那个方法是定义在Person1类中,参与比较的Person1类的对象也是在Person1类中的比较,private 的成员相当于其他类时是私有的,相当于自己的类时就可以使用,跟具体对象无关。
如:
  1. class Person {
  2.         private String name;
  3.         @Override
  4.         public boolean equals(Object obj) {
  5.                 if(obj instanceof Person){
  6.                         Person p=(Person) obj;
  7.                         String s=p.name;  //编译不报错(Person对象p在Person类的对象中使用)
  8.                 }
  9.                 return false;
  10.         }
  11. }
  12. class People{
  13.         @Override
  14.         public boolean equals(Object obj) {
  15.                 if(obj instanceof Person){
  16.                         Person p=(Person) obj;
  17. //                        String s=p.name;  //编译报错(Person对象p不在Person类的对象中使用)
  18.                 }
  19.                 return false;
  20.         }
  21. }
复制代码

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马