多语言展示
当前在线:899今日阅读:75今日分享:44

Delphi抽象类和接口的异同

Delphi抽象类和接口的异同
方法/步骤
1

打开delphi7集成开发环境,默认会创建project1工程,在工程内新建一个unit

2

在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中一个类如果有抽象方法,那么这个类就是一个抽象类

3

F9运行代码,能编译通过,但是会有一个警告[Warning] Unit2.pas(15): Constructing instance of 'TMyClass' containing abstract method 'TMyClass.DoSomething'

4

在Unit1.pas文件users Unit2,在Form1中添加一个button按钮,在按钮的事件方法添加代码如下:procedure TForm1.btn1Click(Sender: TObject); var   MyObj:TMyClass; begin   MyObj := TMyClass.Create;   MyObj.DoSomething;   MyObj.Free; end;

5

F9运行代码,点击button按钮,报错提示框如下图,这种直接抽象类创建实例对象的用法本身就是错误的,正确的方法应该是子类继承抽象类,并override重写抽象方法,子类实例化对象,调用重写的方法才是正确的用法

6

修改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等访问说明

7

F9运行代码,程序无法正常编译如下图,因为接口不那个实例化对象

推荐信息