我是想知道为什么建立了超类的对象,后面又用New来引用子类。这里想不明白。

解决方案 »

  1.   

    区分以下三个术语:
       “声明(declairation)”,“建立(create)”,“引用(reference)”
    "SuperClass s1=new SubClass(10);//这里是什么意思?"这句话中
    "SuperClass s1"声明了一个SuperClass的变量,但此变量的值为null
    “new SubClass(10)”才真正在堆中创建了一个对象;并把该对象的引用赋值给变量s1;
    可见声明的时候并不一定会创建对象;至于引用只是象int一样的一个值,JVM根据它可以在堆中找到特定的对象。
      

  2.   

    流浪的人,这两种new的方式,那一个更好些?
      

  3.   

    记住面向对象里的一个规则:所有的子类对象都是父类对象(如所有的黑猫都是猫)
    这样来理解那个语句就比较容易了
    SuperClass s1=new SubClass(10);
    可以分解为下面的语句:
    SuperClass s1;
    SubClass s2 = new SubClass(10);
    s1 = s2;//子类对象s2肯定是s1的一种,所以这样赋值没有错
    父类生成一个对象s1,子类生成一个对象s2
    把s2赋给s1