[NAME] ALL.dao.class.inheritance [TITLE] 类的继承 [DESCRIPTION] 道语言里,新类可由已存在的类(或C数据类型)作为基类派生出来, 新类将作为该基类的子类继承基类 的一些数据和方法成员。 基类有时也被称作父类。 定义派生类时,基类的类名必须用冒号分割放在派生类名后面。 这里是个简单的例子: 1 class Base 2 { 3 var id = 0 4 5 routine Base( i = 0 ){ id = i } 6 } 7 class Sub : Base 8 { 9 var value = 'abc' 10 } 11 var obj = Sub() 这个例子中,派生类的一个实例由该类的隐含的缺省构造方法产生。 该构造函数将自动调用基类的构造 方法(隐含的或显式定义的)以初始化基类的成员数据。 当显式定义派生类的构造方法时,基类的构造方法可被显式地调用。 这种调用方式跟C++里的类似,就是 用冒号分割,把基类构造方法的调用 放在派生类的构造方法的原型后面。 基类构造方法的调用可使用也 仅可使用派生类构造方法里的参数, 和自动定义的self变量。 1 class Sub : Base 2 { 3 var value = 'abc' 4 5 routine Sub( v = 'ABC', i = 3 ) : Base( i ) { value = v } 6 } 1 load meta 2 3 class Base 4 { 5 var id = 0 6 7 routine VirtMeth(){ io.writeln( 'Base::VirtMeth()' ) } 8 routine NormMeth(){ 9 meta.self( self ).VirtMeth() # emulate virtual method call; 10 } 11 } 12 class Sub : Base 13 { 14 var value = 'abc' 15 routine VirtMeth(){ io.writeln( 'Sub::VirtMeth()' ) } 16 } 17 o : Base = Sub() 18 o.NormMeth() # prints: Sub::VirtMeth()