public class test1 {
public static void main(String[] args) {
Object circle1=new Circle();
Object circle2=new Circle();
System.out.println(circle1.equals(circle2));
}
}
class Circle {
public double radius=1;
public boolean equals(Circle circle){
return this.radius==circle.radius;
}
}
则个程序为什么会输出false,书上说在重载Object中equals()的方法时必须把里面的形参声明为Object,这是为什么?不这样做的后果是什么?

解决方案 »

  1.   

    System.out.println(circle1.equals(circle2));
    不是同一个实例对象,它们指向的堆中的地址是不同的,所以会输出false、书上说在重载Object中equals()的方法时必须把里面的形参声明为Object
    重载Object方法,不就是为了比较对象嘛,参数当然要Object型了
      

  2.   

    不是Object型 你也没法访问里面的属性啊、、
    return this.radius==circle.radius;
      

  3.   

    还是不太明白,那我把circle2改成(Circle)circle2行吗?
      

  4.   

    不是,
    Object circle1=new Circle();
    Object circle2=new Circle();
    circle1,circle2是Object型的,
    System.out.println(circle1.equals(circle2));
    此处的equals不是你重写的,而是Object的equals方法
    Circle circle1=new Circle();
    Circle circle2=new Circle();
    这样就会输出true了