delphi 的抽象类为什么可以实例化呢?

来源:百度知道 编辑:UC知道 时间:2024/06/15 15:28:37
从资料上知道:
至少含有一个抽象方法(声明一个抽象方法是用Abstract指示字)的类称为抽象类,抽象类不能建立对象实例。
但是我用下面的程序测试发现抽象类却能实例化,请高手指教!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
Tmyclass=class
str : string;
procedure abstractme; virtual; abstract;
end;
Tmuclass=class(Tmyclass);

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
aTmuclass :Tmuclass;
aTmyclass :Tmyclass;
begin
aTmuclass := Tmuclass.Create;
aTmuclass.

button1中

添加 aTmuclass.abstractme;
运行的时候就会出现Abstract错误的;

button2中 你使用 alist 的时候 也是会报错的 ;

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

//夫类,抽象类
TParent = class
protected
function MyFun(i: Integer): Integer; virtual; abstract;
//抽象方法(纯虚方法),只有定义没有实现,一个类包含一个即成抽象类,抽象类不能直接创建对象。
end;

//子类
TChild = class(TParent)
protected
function MyFun(i: Integer): Integer; override; //覆盖
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ TChild }

function TChild.MyFun(i: Integer): Integer;
begin
Inc(i);