比如A是父类,B是子类。
A a = new A();
B b = new B();

a = b;

a = new B();具体什么区别?

解决方案 »

  1.   

    这样就能多态了.
    比如你还有个C,也是A的子类.
    就可以A c = new C();
    这里你可以假设A代表人类.B代表姚明,C代表你.
    A(人类) b = new B();//这时候人类就被实例化成具体的姚明了.
    b.play();//这里假设人类有个方法叫打篮球.这里就是姚明在打球
    A(人类) c = new C();//这时候人类就被实例化成你了.
    c.play();//这里就是你在打球了.你打球和姚明打球差距自然不言而喻.上面就是多态的一种体现了.好好领会下.
      

  2.   

    A a = new A(); 
    B b = new B(); 
    区别就是
    a = b; 的时候new A()的对象就是垃圾了,

    a = new B();的时候 a直接指向new B()的地址. 
      

  3.   

    a=b;将b的引用赋给a;
    a = new B(); 重新分配对象B
      

  4.   

    对于多态而言,a = b; 和 a = new B(); 没有区别。无论是定义还是结果都没什么影响。把父类的引用指向子类,此时a如果调用方法的话,会调用子类重写的方法。
      

  5.   

    public class DoYou {    
        public static void main(String[] args) {
            A a = new A();
            B b = new B();
            a.s = "[AA]";
            b.s = "[BB]";
            System.out.println(a.s);      
            System.out.println(b.s);      
            System.out.println(a.getS()); 
            System.out.println(b.getS()); 
            System.out.println("====================");
            a = b; 
    //a = new B();
            System.out.println(a.s);      
            System.out.println(b.s);      
            System.out.println(a.getS()); 
            System.out.println(b.getS()); 
            System.out.println("====================");
            ((A) b).s = "[AA]"; 
            System.out.println(a.s);      
            System.out.println(b.s);      
            System.out.println(a.getS()); 
            System.out.println(b.getS()); 
        }
    }class A {
        String s = "[A]";
        String getS() {
            return s;
        }
    }class B extends A{
        String s = "[B]";
        String getS() {
            return s;
        }
    }请大家把这段运行下,然后把a = b;注释掉,把下面那句注释符号取消,看看结果有什么不同。原因是什么?
      

  6.   

    a=b;将b的引用赋给a; 
    a = new B(); a直接指向new B()的地址.
      

  7.   

    如果说结果的话..LZ的方法没什么区别不过意义是不一样的
    A a = new A(); 
    B b = new B(); 
    a = b;  //是把A指向了B的引用
    和 
    a = new B();//使A类对象重新分配一个新的内存地址..一个新对象不等于b...不过结果没什么区别
      

  8.   

    a = b 
    a指向了b的引用a = new B()
    新生成了个B
      

  9.   

    LZ在9F给的程序就有多态啊,不一样的原因在于用a=new B();后,这个时候a指向的是一个新的B对象,里面的都是初始值,没有被你第一段代码改变S的值
      

  10.   

           我的理解是,
           a是变量。new A()是创建了一个在内存中创建了一个A的实例,然后变量a指向内存中的A
           a = b,那么就是a指向b指向的对象B的一个实例。
           a = new B()是创建了一个内存中新的B的实例,然后换由a指向他。a和b在内存中指向的实例是不同的。
      

  11.   

    a=b;a和b指向同一块堆内存;
      

  12.   

      都是把B对象的引用(地址)赋给a 
    在使用上没有什么区别. 
    跟  
     int  i = 2;
      int b = 3;
      i = b ;
    i = 3;
     类似.这里因为有多态 把子类的引用赋给对象了.
    其实这个两个功能上是一样的. 
     
      

  13.   

    a=b  将a的new指针指向b的地址
    a=new b()是在堆中创建一个B的对象
      

  14.   

    有区别
    a=b //在对象池中找到对象句柄b,在将对象句柄a指向b所指的内存地址,没有开辟一个新的内存地址
    a=new B() //在内存中开辟一个新的内存地址,再将对象句柄a指向新内存地址的首地址