(4)关于类的重载
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.OleCtnrs;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TMyForm = class
public
procedure Show2;virtual; //虚方法
end;
TMyFrom1 = class(TMyForm)
public
procedure Show2;override; //覆盖父类同名的方法,也可看作重载。
//overload,重载本类里面的函数或者过程,简单来说就是在当前类中可以声明多个同名但参数不同的函数或过程,下面就声明了两个同名却参数不同的过程
procedure Show3(str,Str1 : string);overload;
procedure Show3(Str: String);overload;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TMyForm }
procedure TMyForm.Show2;
//父类的Show2
begin
ShowMessage('这是父类的');
end;
{ TMyFrom1 }
procedure TMyFrom1.Show2;
//子类的Show2
begin
inherited; //该指令字的意思就是继承,执行父类中同名函数或者过程从而实现多态。当然也可以不继承
ShowMessage('这是子类的'); //然后才输出自己的方法、
end;
procedure TMyFrom1.Show3(str, Str1: string);
begin
ShowMessage(str + Str1); //通过overload重载的过程,他有两个参数
end;
procedure TMyFrom1.Show3(Str: String);
begin
ShowMessage(Str); //还是刚才通过overload重载的过程,他有一个参数,他们虽然同名,但是却实现了不同的操作。
end;
procedure TForm1.Button1Click(Sender: TObject);
//执行只有一个参数的Show3
var
my : TMyFrom1;
begin
my := TMyFrom1.Create;
my.Show3('123');
my.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
//执行有两个参数的Show3
var
my : TMyFrom1;
begin
my := TMyFrom1.Create;
my.Show3('123','123');
my.Free;
end;
procedure TForm1.Button3Click(Sender: TObject);
//执行子类的Show2,因为在子类Show2方法的实现过程中有inherited指令字,所以将会分别输出父类的Show2与子类的Show2
var
my : TMyFrom1;
begin
my := TMyFrom1.Create;
my.Show2;
my.Free;
end;
end.
重载的好处就是真正的实现了面向对象的多态性,同样一个函数可以根据参数的不同实现不同的各种参数。大大的减少了代码的数量也方便我们记忆。