把bb:=TAa(aaa);
改成 bb:= TAaa.Create 试一试 

解决方案 »

  1.   

    因为ShowString是虚拟方法啊,而你是用aaa(TAaa的实例)给bb赋的值,多态的意义就在于此。
      

  2.   

    小指一下错误你的create却没有free;另外,
    taa(aaa)不是没有作用,其实这就是多态性的一个特点,通过基类调子类
      

  3.   


    可以这样来理解(仅仅作为理解)假设Ta被封装后的类入口结构为_Ta=record
      _ShowString:Pointer;//函数指针
    end;当创建aa实例时,将aa的方法对应的地址存入aa入口结构的指针中;相应的,当创建aaa实例时,将aaa的方法对应的地址存入aaa的入口结构的指针中;    而对于bb,将aaa的实例指针引用并传递给bb时,只将对应方法的指针(aaa的对象指针)值传递给bb,所以引用出来的当然是aaa的方法了。
      

  4.   

    Label1: "This is return by method by TAa!";
    Label2: "TAaa";
    Label3: "'This is return by method by TAaa!";