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

作用域    

  • 类的每个成员都有一个称为可见性的属性,我们称为作用域,。作用域决定了一个成员在哪些地方以及如何能被访问。TSL用下面3个关键字之一来表示它:private、protected、public

    Private:表示最小的访问能力,只能在类内部的方法、属性调用,不能从类的外部调用;也不能被继承。
    Protected:表示中等的访问能力,在声明它的类的模块中是随处可用的,并且在它的派生类中也是可用的。
    Public:表示最大的访问能力,只要能使用类的地方都是可用的。

    注:
    若声明一个成员时没有指定其作用域,则它和前面的成员拥有相同的作用域.
    若在类声明的开始没有指定作用域, TSL成员(包括字段、方法、属性)默认的作用域是public。
    作用域关键字可以在程序中重复出现多次。

    为可读性考虑,最好在声明类时用作用域来组织成员:把所有的private 成员组织在一起,接下来是所有的protected 成员,最后是public成员。用这种方法,每个可见性关键字最多出现一次,并且标明了每个新段的开始。所以,一个典型的类声明应该像下面的形式:
    type
    MyClass = class(BaseClass)
    private
    ... { private declarations here}
    protected
    ... { protected declarations here }
    public
    ... { public declarations here }
    end;

    示例:
    下面的代码详细说明了继承与作用域的关系

    program test;
    type A =class()
    private

    function F1();

    Begin


    Writeln("from private F1");

    End;

    protected

    Function F2();

    Begin


    Writeln("from protected F2");

    End;
    public

    Function F3();

    Begin


    Writeln("from public F3");

    End;



    Function F4();

    Begin


    Writeln("from public F4");


    F1();//正确,可以在类内部的方法调用private 的成员。


    F2();//正确,可以在类内部的方法调用protected的成员


    F3();//正确,可以在类内部的方法调用public的成员

    End;
    End;

    Type B = Class(A)

    Function F5();

    Begin


    Writeln(" Inherit test :call private funciton ");



    F1();//错误,不能调用基类的私有方法

    End;




    Function F6();

    Begin


    Writeln("inherit test: call protected function");


    F2();//正确,调用基类的protected 方法

    End;

    Function F7();

    Begin


    Writeln("inhert test :call public function ");


    F3();//正确,调用基类的public 方法

    End;

    End;

    Begin

    AA:=createobject("A");

    AA.F1();//错误,不能调用类型的private方法

    AA.F2();//错误,不能调用类型的protected方法

    AA.F3();//正确,可以调用类型的public 方法

    AA.F4();//正确,可以调用类型的public 方法,方法内部可以调用private成员.
    End.