16,748
社区成员
发帖
与我相关
我的任务
分享
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
// 定义一个基类
TObj = class
private
FObjName: string;
public
property ObjName: string read FObjName write FObjName;
procedure ShowName;
constructor Create; overload;
constructor Create(name: string); overload; // 重装构造函数,以提供一种可选的初始化方式
end;
// 定义两个TObj的子类
TObj1 = class(TObj) end;
TObj2 = class(TObj) end;
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
public
procedure Showstr(AObj: TObj);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TObj }
constructor TObj.Create;
begin
end;
constructor TObj.Create(name: string);
begin
FObjName := name;
end;
procedure TObj.ShowName;
begin
ShowMessage(FObjName);
end;
{ TForm1 }
procedure TForm1.Showstr(AObj: TObj);
begin
AObj.ShowName;
end;
procedure TForm1.btn1Click(Sender: TObject);
var
o1: TObj1;
o2: TObj2;
begin
// btn1Click 函数中创建了 o1,o2两个对象,
// 所以,o1,o2 的释放由 btn1Click 函数负责
// 这就是所谓的“谁创建,谁销毁”的原则
o1 := TObj1.Create('马桶'); // 用构造函数初始化 ObjName
o2 := TObj2.Create;
o2.ObjName := '热翔'; // 通过对对象属性赋值来初始化 ObjName
// 通过多态性,能正确显示不同的对象名(基于基类的继承类)
Showstr(o1);
Showstr(o2);
// 释放对象
o1.Free;
o2.Free;
end;
end.