equals()方法疑问!!!
class   Super{ 
 	int   a=10; 
 	void   hi(){ 
 		System.out.println( "你好 "); 
 	} 
 } 
 class   sub   extends   Super{ 
 	int   b=20; 
 	void   hi(){ 
 		System.out.println( "hi~~~~ "); 
 	} 
 	void   bye(){ 
 		System.out.print( "sssss "); 
 	} 
 } 
 public   class   Inher10{ 
 	public   static   void   main(String[]   args){ 
 		Super   ob1=new   sub(); 
 		sub   ob2=(sub)ob1; 
 		sub   ob3=new   sub();  		 
 		System.out.println(ob2.equals(ob3));  		 
 	} 
 } 
 请问ob3和ob2各自指向对象的内容不同在哪里啊?
------解决方案--------------------在你的例子里,不同是因为他们不是同一个东西。   
 解释这个问题不是一句两句的,但是不难。 
 1,obj1 == obj2是比较obj1和obj2是不是reference同一个对象实例。 
 2,obj1.equals(obj2)是按照equals()的逻辑来比较两个对象实例。 
 3,如果一个class没有定义自己的equals()方法,那么它会继承Object class里的equals()方法,在这个方法里,比较逻辑跟==相同。   
 在上面的例子里,class sub没有定义自己的equals()方法,所以比较的还是obj2,obj3是不是同一个对象实例。显然,他们不是同一个。 
 反之,如果在class sub里定义了自己的equals()方法: 
 public boolean equals(Object o) 
 { 
   return (o instanceof sub) && o.a == this.a && o.b == this.b; 
 } 
 那么就会按照这个逻辑比较两个对象实例。 
------解决方案--------------------{虽然每个类都通过,默认继承,或间接从object类中继承得到了equals()方法. 
 实际在object类中的原始方法的内容中不会去做任何判断, 
 实际经过测试,实际上,作了这样一个判断, 
 if(this == obj){ 
 return true; 
 }else{ 
 return false; 
 } 
 仅仅只是返回false而已.}   
 所以,你这程序无论怎么写,都仅仅只会的到,equals=false而已. 
 建议好好看一下API文档. 
 可通过以下程序可知: 
 public class TestEquals { 
 	public static void main(String[] args){ 
 		MyObject o1 = new MyObject(); 
 		MyObject o2 = new MyObject(); 
 		MyObject o3 = o1; 
 		System.out.println(o1.equals(o2)); 
 		System.out.println(o1.equals(o3)); 
 	} 
 }   
 class MyObject{  	 
 } 
 如果想获得自己所想的的equls()的,必须在自己的类中重写  
 从object中继承得到的equls()方法. 
 如果不重写,只要,不是同一个对象,那得到的一定是false;
------解决方案--------------------您在:“Super ob1=new sub(); sub ob2=(sub)ob1; sub ob3=new sub();”创建了两个对象ob2、ob3,既然ob2与ob3是不同的对象,那自然“ob2.equals(ob3)”会false。 
------解决方案--------------------不同的对象ob2.equals(ob3)肯定是false