public class Circle extends Object{
    private double r;    public Circle(Double r) {
        this.r = r;
    }    public Double getR() {
        return r;
    }    public boolean equals(Circle circle) {
        return this.r == circle.getR();
    }}public class Test {
    public static void main(String[] args) {
        Object c1 = new Circle(5.0);
        Object c2 = new Circle(5.0);        System.out.println(c1.equals(c2)); // false    }
}为输出的结果是false呀,不是会进行动态绑定,然后去调用Circle的equals(Circle circle)方法吗

解决方案 »

  1.   


    你这个是重载,不是重写,所以调用的应该还是Object类的equals方法
      

  2.   

    double   写程序要避免 浮点数 == 比较,会有精度问题
      

  3.   


    把equals重写成
     public boolean equals(Object obj) {
         Circle c = (Circle) obj;
            return this.r == c.getR();
        }
      

  4.   

    确实还有double的精度问题
      

  5.   


    你这个是重载,不是重写,所以调用的应该还是Object类的equals方法
    我知道这个是重载,但是我想问的是,重载的时候是不会产生动态绑定的吗,运行的时候c1和c2都应该是circle类型啊,望解答!
      

  6.   

    首先==表示比较的是内存地址并不是两个数值,你通过get方式获得的是两个Double对象存在隐式转换的问题,获得double试一下
      

  7.   

    c1,c2的类型改成Circle就行了        Circle c1 = new Circle(5.0);
            Circle c2 = new Circle(5.0);
      

  8.   

    我知道这个是重载,但是我想问的是,重载的时候是不会产生动态绑定的吗,运行的时候c1和c2都应该是circle类型啊,望解答!你申明的是Object类型,这里c1和c2被转换为Object类型了。父类只能调用子类重写的方法,不能调用重载的方法。
      

  9.   

    我知道这个是重载,但是我想问的是,重载的时候是不会产生动态绑定的吗,运行的时候c1和c2都应该是circle类型啊,望解答!你申明的是Object类型,这里c1和c2被转换为Object类型了。父类只能调用子类重写的方法,不能调用重载的方法。
    谢谢回答!我现在懂了!