TSL语言基础 > Object TSL > 类继承和作用域

继承    

  • 面向对象中,继承是基础。我们可以对已有的类复用和扩展。通过继承我们可以让新类拥有了已有类的数据和行为。也可以扩展新类,是它具有更多的数据和行为。
    我们这里称已有类为新类的基类或父类,有的地方也叫超类。
    我们称新类为已有类的子类或派生类。
    由于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.
    以上代码演示在类内部调用多个基类相同方法的方法,如果在子类的外部调用这个方法,总是调用基类声明在最前面的类的方法。没有办法调用其他基类的方法,一个技巧是必须在子类中包装这个方法,在外面调用包装的方法。

内容