谈谈Delphi中的类和对象3---抽象类和它的实例

四、抽象类和它的实例

  Delphi中有一个类称为是抽象类,你不能天真的直接为它创建一个实例,如

var
    StrLst: TString;
begin
    StrLst:= TString.Create;
    StrLst.Add('I love China');
    StrLst.Free;
end;

  这是不对的,因为TString是一个抽象类。

  那么怎么为这样的抽象类构造实例呢?答案就是借助它的非抽象子类。我们知道TString有一个TStringList的非抽象子类。所以可以这样操作

var
    StrLst: TString;    //还是可以通过抽象类来进行声明
    //或者直接用 StrLst:TStringList;    不过前者更好一些
begin
    StrLst:= TStringList.Create;    //但是创建具体的对象就必须使用抽象类的非抽象子类
         //而且这样创建的实例在内存中是其子类的结构,
         //尽管在var里面使用抽象类声明的,但是具体的create是其非抽象子类
    StrLst.Add('I love China');
    StrLst.Free;
end;