use*_*073 3 delphi inheritance
我的顶级课程是TBaseDB,有一个后代TCommonDB(,并且TCommonDB将有多个后代,像TProdDB和TDevDB).
让我们在每个类定义中创建一个函数,称为Test1.现在,它所做的ShowMessage('Some literal')只是向我展示正在执行的代码.
直到运行时我才知道类类型.我希望有共同的代码,但行为不同.
我想要的是这样的:
var
MyObj: TBaseDB;
begin
//pseudo-code...
if RadioButton1.Checked then
MyObj := TBaseDB.Create
else
MyObj := TCommonDB.create;
MyObj.Test1;
end;
Run Code Online (Sandbox Code Playgroud)
我似乎无法让这个工作,我想它是在我的班级定义.应该如何Test1定义:
TBaseDB,TBaseDB或TCommonDB,和Test程序将取决于实例是一个被称为TBaseDB还是TCommonDB?And*_*and 10
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TFruit = class
public
procedure ShowMessage; virtual; abstract;
end;
TApple = class(TFruit)
public
procedure ShowMessage; override;
end;
TOrange = class(TFruit)
public
procedure ShowMessage; override;
end;
{ TApple }
procedure TApple.ShowMessage;
begin
Writeln('I''m an apple!');
end;
{ TOrange }
procedure TOrange.ShowMessage;
begin
Writeln('I''m an orange!');
end;
var
fruit: TFruit;
begin
fruit := TApple.Create;
fruit.ShowMessage;
Writeln('Press Enter to continue.');
Readln;
end.
Run Code Online (Sandbox Code Playgroud)
该关键字abstract允许您在基类中完全不执行任何操作.但是,您也可以在那里实现:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TFruit = class
public
procedure ShowMessage; virtual;
end;
TApple = class(TFruit)
public
procedure ShowMessage; override;
end;
TOrange = class(TFruit)
public
procedure ShowMessage; override;
end;
{ TFruit }
procedure TFruit.ShowMessage;
begin
Writeln('I''m a fruit.');
end;
{ TApple }
procedure TApple.ShowMessage;
begin
inherited;
Writeln('I''m an apple!');
end;
{ TOrange }
procedure TOrange.ShowMessage;
begin
inherited;
Writeln('I''m an orange!');
end;
var
fruit: TFruit;
begin
fruit := TApple.Create;
fruit.ShowMessage;
Writeln('Press Enter to continue.');
Readln;
end.
Run Code Online (Sandbox Code Playgroud)
练习:
TFruit?inherited在TApple.ShowMessage和TOrange.ShowMessage意味着什么呢?他们是否需要处于程序的首位?如果省略它们会发生什么?| 归档时间: |
|
| 查看次数: |
477 次 |
| 最近记录: |