(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.

 


重载的好处就是真正的实现了面向对象的多态性,同样一个函数可以根据参数的不同实现不同的各种参数。大大的减少了代码的数量也方便我们记忆。

原文地址:https://www.cnblogs.com/mdnx/p/2573817.html