begin
SomeObject := T2.Create;
SomeObject.Act; // 调用T1.Act
end;
Reintroduce(重新引入)
reintroduce指示字告诉编译器,当隐藏一个先前声明的虚方法时,不给出警告信息。比如,procedure DoSomething; reintroduce; // 父类也有一个
当要使用新方法隐藏继承下来的虚方法时,使用reintroduce指示字。
Abstract methods(抽象方法)
抽象方法是虚方法或动态方法,并且在声明它的类中没有实现,而是由它的派生类来实现。声明抽象方法时,必须在virtual或dynamic后面使用abstract指示字。比如,
procedure DoSomething; virtual; abstract;
只有当抽象方法在一个类中被覆盖时,你才能使用这个类或它的实例进行调用。
Overloading methods(重载方法)
一个方法可以使用overload指示字来重新声明,此时,若重新声明的方法和祖先类的方法具有不同的参数,它只是重载了这个方法,并没有隐藏它。当在派生类中调用此方法时,依靠参数来决定到底调用哪一个。
若要重载一个虚方法,在派生类中重新声明时使用reintroduce
- 104 - DoSomething方法指示字。比如,
Classes and objects
type
T1 = class(TObject)
procedure Test(I: Integer); overload; virtual; end;
T2 = class(T1)
procedure Test(S: string); reintroduce; overload; end; ...
SomeObject := T2.Create; SomeObject.Test('Hello!'); // 调用T2.Test SomeObject.Test(7);// 调用在一个类中,你不能以相同的名字公布(published)多个重载的方法,维护的成员具有不同的名字。
type
TSomeClass = class published
function Func(P: Integer): Integer;function Func(P: Boolean): Integer
// 错误...
作为属性读写限定符的方法不能被重载。
实现重载的方法时,必须重复列出类声明时方法的参数列表。关于重载的更多信息,请参考procedures and functions。
Constructors(构造函数)
构造函数是一个特殊的方法,用来创建和初始化一个实例对象。声明一个构造函数就像声明一个过程,但以constructor开头。比如:
constructor Create;
constructor Create(AOwner: TComponent);
构造函数必须使用默认的register调用约定。虽然声明中没有指定返回值,但构造函数返回它创建的对象引用,或者对它进行调用的对象(的引用)。
一个类的构造函数可以不止一个,但大部分只有一个。按惯例,构造函数通常命名为要创建一个对象,在类(标志符)上调用构造函数。比如,MyObject := TMyClass.Create;
它在堆中为对象分配内存,并设置所有的有序类型的字段为使所有的字符串类型的字段为空;接下来,构造函数中指定的其它动作(命令)开始执行,通常,初始化对象是基于传给构造函数的参数值;最后,构造函数返回新创建的对象的引用,此时它已完成了初始化。返回值的类型与调用构造函数的类相同。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-76.html
还能一棵树上吊死
还是要打气
最多就抗议一下