面向对象中,继承是基础。我们可以对已有的类复用和扩展。通过继承我们可以让新类拥有了已有类的数据和行为。也可以扩展新类,是它具有更多的数据和行为。
我们这里称已有类为新类的基类或父类,有的地方也叫超类。
我们称新类为已有类的子类或派生类。
由于TSL支持多级继承。其中基类,基类的基类(如果有的话)都同意叫做子类的祖先类。
子类可以通过继承获得基类的数据和方法,有效复用,提高开发效率,使代码易于维护。
TSL继承的实现方式是:声明类类型时,在Class后面的括号内指定父类型的名称。TSL支持多重继承,基类可以指定多个,其中用逗号分割。格式为:
type myClass = class(BaseClass1[,BaseClass2,…]);
以上代码定义了一个叫做myClass 的类,它继承自BaseClass1、BaseClass2列表。这样我们称MyClass为子类,BaseClass1,BaseClass2…为MyClass的基类或父类。也可以叫祖先类.
子类MyClass将获得基类(BaseClass1、BaseClass2、…)的所有非私有数据和行为,此外新类可以为自己定义新的数据和行为进行扩展,也可以重新定义基类中的行为.
示例:
Program test;
//声明类A
Type A = class
Function F1()
Begin
Writeln("call A.F1");
End;
End;
//声明类B,继承自A
Type B =Class(A)
End;
Begin
//创建B类的实例对象BB
BB:=CreateObject("B");
BB.F1;
End.
上面代码类B通过继承获得类A的方法F1(),自己确不用定义方法F1();
如果子类的多个基类都有同样的方法,在子类中调用这个方法时需要为这个方法指定具体的父类,方法为在调用的方法前面加上 Class(基类名称).
示例
Type Base1 =Class
Function F();
Begin
writeln("Base1.F");
End;
End;
Type Base2 =Class
Function F();
Begin
writeln("Base2.F");
End;
End;
Type SubClass =Class(Base1,Base2)
Function CallBaseF();
Begin
class(Base2).F();//指定要调用类Base2的F方法。
End;
End;
Begin
S:=CreateObject("SubClass");
S.CallBaseF();
End.
以上代码演示在类内部调用多个基类相同方法的方法,如果在子类的外部调用这个方法,总是调用基类声明在最前面的类的方法。没有办法调用其他基类的方法,一个技巧是必须在子类中包装这个方法,在外面调用包装的方法。