这三中声明方式有什么区别吗?
Object   obj=new   Object   ();      和 
 subclass   obj   =   new   subclass();和 
 Object   obj=new   subclass   ();   
 //其中subclass是OBject的子类   
 请高手帮我讲下他们的基本原理,越详细越好
------解决方案--------------------Object obj=new Object ();  //一般的初始化 
 subclass obj = new subclass();//一般的初始化 
 Object obj=new subclass ();//向上转型 
 向上转型: 
 它是一个编译是为父类对象,但运行却是一个子类对象,具体特征如下. 
 1.被声明为父类对象  
 2.拥有父类属性  
 3.占用子类的内存空间  
 4.子类方法覆盖父类的方法时,此时对象调用的是子类的方法;否则,自动调用继承父类的方法.  
 5.我人认为这个对象既不是父类对象,也不是子类对象.当我们用到它的方法时,  
 我便把它看成子类对象;若用到它的属性时,我把它看成父类对象.  
 它是一个占用父类属性,而使用子类方法的对象.至于到底是什么对象,我认为还是得根据声明来,它应算是父类对象,但拥有子类方法.  
 这时候子也就是子类向上转型。   
------解决方案--------------------Object obj = new Object(); 
               ______________ 
 ________      |            | 
 |  obj | -->   | Object实例 | 
 ^^^^^^^^      |            | 
               ^^^^^^^^^^^^^^ 
 你可以通过obj来访问Object类的一些方法或属性。 
 subclass obj = new subclass(); 
               ______________ 
 ________      |            | 
 |  obj | -->   | Object实例 | 
 ^^^^^^^^      |            | 
               |````````````| 
               |subclass扩展| 
               ^^^^^^^^^^^^^^ 
 可以通过obj来访问右边这个subclass类的实例的方法或属性, 
 包括Object原有的和subclass扩展的。但如果subclass中有和Object 
 中重复的属性或方法,访问的将是subclass的,而不是Object的。 
 Object obj = new subclass(); 
               ______________ 
 ________      |            | 
 |  obj | -->   | Object实例 | 
 ^^^^^^^^      |            | 
               |````````````| 
               |subclass扩展| 
               ^^^^^^^^^^^^^^ 
 这个图和上个图相同,但obj这个实例引用的类型却不同。obj此时是Object的引用类型。 
 虽然它也指向一个subclass类的实例。但由于只能通过obj来访问,而obj的类型是Object引用。 
 所以也只能访问Object所拥有的方法或属性。同样,如果subclass中包含Object中相同的方法或属性,通过obj调用的是subclass的方法行为或属性。   
 这种向上转换,丢失了类型信息,当然也就丢失了subclass对Object的扩展信息。