打开delphi7集成开发环境,默认会创建project1工程,在工程内新建一个unit
在unit2.pas文件写代码如下:unit Unit2; interface type TMyClass=class public function DoSomething:string;virtual;abstract; end; implementation procedure t(); var MyObj:TMyClass; begin MyObj := TMyClass.Create; MyObj.Free; end; end. 在Delphi中一个类如果有抽象方法,那么这个类就是一个抽象类
F9运行代码,能编译通过,但是会有一个警告[Warning] Unit2.pas(15): Constructing instance of 'TMyClass' containing abstract method 'TMyClass.DoSomething'
在Unit1.pas文件users Unit2,在Form1中添加一个button按钮,在按钮的事件方法添加代码如下:procedure TForm1.btn1Click(Sender: TObject); var MyObj:TMyClass; begin MyObj := TMyClass.Create; MyObj.DoSomething; MyObj.Free; end;
F9运行代码,点击button按钮,报错提示框如下图,这种直接抽象类创建实例对象的用法本身就是错误的,正确的方法应该是子类继承抽象类,并override重写抽象方法,子类实例化对象,调用重写的方法才是正确的用法
修改Unit2.pas文件,增加一个接口,代码如下:unit Unit2; interface type TMyClass=class public function DoSomething:string;virtual;abstract; end; IMyInter=interface function DoSomething:string; end; implementation procedure t(); var MyObj:TMyClass; MyInter:IMyInter; begin MyObj := TMyClass.Create; MyObj.Free; MyInter := IMyInter.create; end; end. 注意接口没有public等访问说明
F9运行代码,程序无法正常编译如下图,因为接口不那个实例化对象