本帖最后由 zhouhappy 于 2010-07-21 10:56:04 编辑

解决方案 »

  1.   

    MyAbs ma1 = new MyClass1();
    //一个父类引用,指向了子类的对象MyClass1 myclass=(MyClass1)ma1;
    //引用中有object type pointer,是该引用指向的对象的类型;mal的type pointer是MyAbs,myclass是MyClass1
      

  2.   

    MyAbs ma1 = new MyClass1();
    由于MyClass1继承自MyAbs 所以MyClass1 is a MyAbs 
    所以上面可以转换。 下面的ma1本身就是MyClass1只不过穿了个MyAbs 的马甲,所以下面可以转换。
      MyClass1 myclass=(MyClass1)ma1;如果又有MyClass2:MyAbs 
    MyAbs ma2 = new MyClass2();  MyClass1 myclass=(MyClass2)ma2;
    这是不行的。。
      

  3.   

    |**引用****|******|******实例*****|
    |******ma1|--\---|**************|
    |*********|---\--|**************|
    |*********|----->|new MyClass1()|
    |**myclass|---/--|**************|
      

  4.   

    好,那new MyClass1()的实例里存放的是什么?有没有基类MyAbs的实例?
      

  5.   

    他的先天性残疾【abstract 】注定他不可能有实例。。
    看实例是谁的就看new的是什么。。
      

  6.   

    再给你解释一下。
    就好比有个女人A先天性残疾,没有卵巢,但有子宫。
    有个女人B有卵巢但木有子宫。
    两个人合计生孩子的事,就把B的受精卵放到A的子宫,最后生下来个孩子。
    刚开始孩子管A叫妈,但后来经过DNA鉴定,孩子的妈成了B
      

  7.   


    肯定没有,可以理解为MyClass1是MyAbs的一个形态.
    广州程高级序员群 52866175  欢迎各位广州的同行 (继承"聊天"基类,实现"技术讨论"接口)
      

  8.   

    a在栈中分配,指向堆中的一个对象B
    这个对象继承了父类A(B中包含A)
    但编译器对于a来说只指向了对象B中的对象A
    你调用方法时候只能调用A中的成员。
    对于方法来如果子类重写了,那么会调用子类方法。
    这也是所谓的多态。
      

  9.   

     MyAbs ma1 = new MyClass1();
     对于编译器来说-逻辑上new MyClass1()能够被认为可以是MyAbs的一个形态就可以通过
     运行的时候 我觉得这句就基本没有作用了