初学JAVA,请教一个equals重写问题
比较多,请耐心的看一下,谢谢~~   
 我知道在Object类中equals实际比较的是两个对象是否指向同一个内存区域 
 那在自己写的类中要让它只比较内容是否相等就要重写这个方法 
 可是其中有一点必须使用getclass()判断所属类是否相等,在有继承的情况时还不能用instenceof判断,因为会给子类留空子转,不能让子类转空子的原因是违反了JAVA语言规定中对equals对称性的要求 
 比如A是父类B是子类a,b分别是相应的对象且内容相同 
 在A中重写equals时不能使用 
 if   (!(otherObject   instanceof   A))   return   false; 
 书上的意思似乎是a.equals(b)=ture; 
                                                                               b.equals(a)!=ture 
 那是不是B继承A后在B的equals中 
 if   (!(otherObject   instanceof   A))   return   false; 
 就变成了 
 if   (!(otherObject   instanceof   B))   return   false;      
 这个instanceof操作符不是判断:左面对象是不是右面的类创造的吗? 
 那为什么上面那a.equals(b)=ture呢? 
 子类对象也算是父类创造的吗?   
 还有就是这个 
 class   Employee 
 {      //   .   .   . 
          public   boolean   equals(Object   otherObject) 
          { 
                   .   .   . 
                   //   if   the   classes   don 't   match,   they   can 't   be   equal 
                   if   (getClass()   !=   otherObject.getClass()) 
                            return   false; 
                   .   .   . 
          } 
 } 
 class   Manager   extends   Employee 
 { 
          .   .   . 
          public   boolean   equals(Object   otherObject) 
          { 
                   .   .   . 
                   if   (!super.equals(otherObject))   return   false; 
                   .   .   .          
             } 
 }   
 昏迷``这里为什么又要用super.equals(otherObject)呀? 
 那如果otherObject是一个Manager对象比如m,   Employee的一个对象e 
 那e.getClass()和m.getClass()是不是相同的啊   
 那如果不同的话,假如有Manager对象a,b(内容相同) 
 那a.equals(b)返回什么呢? 
 带到程序里不是这样的吗? 
 执行if   (!super.equals(b))   return   false; 
             =>    Employee中的   if   (getClass()   !=   b.getClass())   return   false; 
 那不就返回false啦??   
 郁闷,越搅越晕,我也不知道我是否表达的够清楚,也不知道是否哪里就理解错了 
 希望有明白我意思的前辈能给我详细的说明一下, 
 万分感激^0^~~~~~~ 
------解决方案--------------------blog 更新: 
  think in java 各章后练习答案..... 
  http://blog.csdn.net/heimaoxiaozi/ 
------解决方案--------------------ls 你这个问题挺绕人的
------解决方案--------------------用equals不涉及到继承的 他本身就类似关键字   
 和重写无关
------解决方案--------------------楼主说得挺烦的,   
 if (!(otherObject instanceof A)) return false; 
 书上的意思似乎是a.equals(b)=ture; 
 b.equals(a)!=ture 
 那是不是B继承A后在B的equals中 
 if (!(otherObject instanceof A)) return false; 
 就变成了 
 if (!(otherObject instanceof B)) return false; 
 --------- 
 当然是不变的,B是A的子类,b.equals(a), a instanceof B=false,而 b instanceof A=true 
 所以a.equals(b)=ture; 
 b.equals(a)!=ture 
 当然要看你具体怎么实现equals方法的,这里是只从instanceof方面解释的,其他的没管     
 这里为什么又要用super.equals(otherObject)呀?