public boolean equals(object obj){
     Name name=null;
    if(obj instancesof Name){
      name=(Name)obj;
      if(name.firstname==this.firstname&&name.lastname==this.lastname){
        return true;
       }else return false;
     }
   return super.equals(obj)
}
在这个方法中为什么最后要写上super.equals(obj),难道写返回false不行吗,有点不理解!
为什么还要让交到Object去比较?

解决方案 »

  1.   

    应该不是单纯的“交到Object去比较”该方法允许Name和Name派生类比较
    所以也加入了最后一句,同Name基类比较
    否则equals单向执行
    就会出现a.equals(b)!=b.equals(a)
      

  2.   

    如果它调用super.equals(),可能它的父类也有覆盖object的equals的方法需要执行。
      

  3.   

    最后调用super.equals()的意思是,当obj是Name的父类的实例时,调用父类的equals方法来判断是否相等。不能直接返回false,有可能是true的。
      

  4.   

    后调用super.equals()的意思是,当obj是Name的父类的实例时,调用父类的equals方法来判断是否相等。不能直接返回false,有可能是true的。很对哦,呵呵,,
      

  5.   

    难道传进来的是obj=老子;通过判断返回true了,就认为老子=儿子了?这逻辑上也不成立啊!!!
      

  6.   

    很明显,中间的代码已经承认了:老子.equals(儿子)
      

  7.   

    这就是不要在equals()方法中使用instanceof进行检验的原因```
    java语法规范要求equals方法具有5大特性:
    (1)自反性:x.equals(x)为true;
    (2)对称性:x.equals(y)为true,那么y.equals(x)也要为true
    (3)传递性:x.equals(y)为true,y.equals(x)为true那么x.equals(z)也要为true;
    (4)一致性:如果x和y引用没变,不管合时调用x.equals(y)结果相同;
    (5)x非空x.equlas(null)为false;
    你上面的代码如果不用super.equlas(obj)就违反了对称性规范```
    就是说儿子==老子,那老子就必须==儿子```