求教java中一个方法覆盖的问题!!!
public   class   Test   { 
       public   static   void   main(String[]   args)   { 
             Object   circle1   =   new   Circle(); 
             Object   circle2   =   new   Circle(); 
             System.out.println(circle1.equals(circle2)); 
       } 
 }   
 class   Circle   { 
       double   radius;   
       public   boolean   equals(Circle   circle)   { 
             return   this.radius   ==   circle.radius; 
       }   
       public   boolean   equals(Object   circle)   { 
                return   this.radius==((Circle)circle).radius; 
       } 
 } 
 请问大家: 
 我调用第一个equals结果是false,第二个equals结果是true。这是为什么啊?
------解决方案--------------------除非circle1,circle2 都定义成Circle类型的,否则根本不调用 equals(Circle circle) 这个方法
------解决方案--------------------不奇怪,楼主你这里是强制转换 
  return this.radius==((Circle)circle).radius; 
 所有类本来就是 Object的子类,所以强制转换后对象是 Circle 类的对象, 
 返回 true 是正确的 
 如果楼主想测试覆盖方法的话两个参数应该选不同类型的......
------解决方案--------------------在java里对象调用方法,采用动态绑定,即调用new出来的对象,而不是其引用 
 如: 
 class A1 { 
 	public void p() { 
 		System.out.println( "p in a1 "); 
 	} 
 }   
 class B1 extends A1 { 
 	public void p() { 
 		System.out.println( " "); 
 	} 
 } 
 A1 a1 = new B1(); 
 B1 b1 = new B1(); 
 a1.p(); 
 b1.p(); 
 其结果都打印p in b1 
 但是对其参数的调用不采用绑定机制,即不会根据子类的对象判定,而是根据本身判定,如: 
 public class Test1 { 
 	public static void main(String[] args) { 
 		Object integer = new Integer(3); 
 		A1 a1 = new B1(); 
 		B1 b1 = new B1(); 
 		a1.p(integer); 
 		a1.p((Integer)integer); 
 		b1.p(integer); 
 		b1.p((Integer)integer); 
 	} 
 }   
 class A1 { 
 	public void p(Integer i) { 
 		System.out.println( "pi in a1 "); 
 	} 
 	public void p(Object o) { 
 		System.out.println( "po in a1 "); 
 	} 
 }   
 class B1 extends A1 { 
 	public void p(Object o) { 
 		System.out.println( "po in b1 "); 
 	} 
 	public void p(Integer i) { 
 		System.out.println( "pi in b1 "); 
 	} 
 } 
 结果为: 
 po in b1 
 pi in b1 
 po in b1 
 pi in b1 
 因为在判断参数时,不会自动转型。   
 回过头来看你这道题: 
 你的参数是Object(因为不会自动转型为Circle),所以不会调用参数为Circle的方法。而你的对象是Circle类型(因为会自动转型为Circle),所以总会去调用Circle类的方法,故去调用你复写Object的equals方法。   
------解决方案--------------------试一下 下面的程序通过System.out.println来跟踪打印 
 程序: 
 public class Test { 
 	  public static void main(String[] args) { 
 	    Object circle1 = new Circle(); 
 	    Object circle2 = new Circle(); 
 	    Circle circle3 = new Circle(); 
 	    Circle circle4 = new Circle(); 
 	    System.out.println(circle1.equals(circle2)); 
 	    System.out.println(circle3.equals(circle4)); 
 	    System.out.println(circle1.equals(circle3)); 
 	    System.out.println(circle3.equals(circle1)); 
 	  } 
 	}   
 	class Circle { 
 	  double radius;   
 	  //equals方法从载 
 	  public boolean equals(Circle circle) { 
 		  System.out.println( "user equals about Circle! "); 
 	    return this.radius == circle.radius; 
 	  }   
 	  //equals方法覆盖(是覆盖父类Object的equals方法)