现在定义一个基类
type Basic = class(TObject);
有一个方法 procedure p;有三个派生类type De1 = class(TOjcet);
De2...De3...
都有个p过程,实现的功能不一样.然后定义一个var M : array of Basic;
为M[1]定义为De1类型,M[2]定义为De2类型,M[3]定义为De3类型.调用他们的P过程时应该有不同的表现.另外 如何实现父类向子类的转换?M[1] as De1么?麻烦各位前辈指点一下,最好能附上完整的代码. 

解决方案 »

  1.   

    然后定义一个var   M   :   array   of   Basic; 
    为M[1]定义为De1类型,M[2]定义为De2类型,M[3]定义为De3类型.调用他们的P过程时应该有不同的表现. 
    ------------------------------------------------------
    有这样数组吗?
    另外   如何实现父类向子类的转换?M[1]   as   De1么? 
    -------------------
    这样错了 
      

  2.   

    所以要请教一下啦  按JAVA的思想是这么写的。不知道在DELPHI里怎么实现
    其他方法也可以,只要实现多态都行.麻烦把完整代码列出来~多谢
    对于父类向子类转换是怎么转呢?麻烦解答一下
      

  3.   

    type   
    Basic = class(TObject); 
     procedure p;virtual;abstract; 
    end;
    De1 = class(Basic); 
      procedure p;override;  
    end;父类能向子类转换?呵呵 JAVA可以?
      

  4.   

       De1 De2 De3是Basic的子类的话,它们就应该从Basic继承,而且按照标准的Delphi写法应该在Basic加一个"T",这样写TBasic! 
     
       子类应该是这样声明:De1 = class(TBasic);   
        .......     
    end; De2 = class(TBasic);   
        .......     
    end;  
      

  5.   

    OOP方面,Delphi和Java的思想是相近的。针对抽象编程示例代码
    var
      s: array of TObject;if s[0] is TControl then // 判断s[0]是否是TControl或其子类的实例
    begin
      TControl(s[0]).Show;  // 显示转换
    end;有时也会直接使用:
    s[0] as TControl
      

  6.   

    在父类中你没有使用Virtual或是Dynamic关键字定义方法P,所以子类中的P方法不是改写父类中的P方法,而是覆盖了父类中的方法。
    你定义的数据基类是Basic,故使用数据中任一元素调用P方法,都是调用的Basic类中的P方法,而不是对应子类的P方法。
    建议在父类中将P方法定义为虚方法,如果不需要实现任何动作,亦可以使用Abstract将其定义为抽象方法。在其子类中使用Override关键字改写此虚方法。
    Type
     TBasic = class
     protected
       procedure P; virtual;abstract;
     end; TDe1 = class(TBasic)
     private
       procedure P; override;
     end;类型转换可以使用强类型转换方法:
    TDe1(M[0]).P;