上转型对象:假设B类是A类的子类或间接子类,当用子类B创建一个对象,并把这个对象的引用放到A类的对象中时,如:A a;
a=new B();
或A a;
B b=new B();
a=b;请问:上面2个不同的实现的本质区别是什么?当 a=new B();时发生了什么,B b=new B();a=b;时又发生了什么?感谢大大。

解决方案 »

  1.   

    a=new B();
    创建一个 B 对象,并赋给变量 a。因为 B 是 A 的子类,所以任何一个 B 对象也可以看做是 A 对象。就像正方形是矩形的子类,所以任何一个正方形都可以看做是一个矩形。a=b;
    将一个 B 对象赋给变量 a。道理同上。
      

  2.   

    说实话,LZ的描述太不规范
    应该说把A类的引用指向B,因为在上述2个例子并没有产生A类的对象
      

  3.   

    我觉得上面两个没什么区别,就是多态问题,a= new B()  a只能访问A中的方法和属性。
      

  4.   

    可能是我的表述没有说清楚 再补充一下A a; 
    B b=new B(); 
    a=b; 上面的语句是生成一个b对象 然后赋给a对象 如果不讨论b对象的垃圾回收问题,那么此时对象b是存在于内存的吧.A a; 
    a=new B(); 而上面这段语句是直接生成了一个无名的B类对象,然后赋给a对象,请问这个无名的B类对象是什么,赋值以后,存在于内存么?谢谢。
      

  5.   

    B b和A a都只是对象的引用而已,内存里对象只有一份