[NAME] ALL.dao.interface [TITLE] 抽象接口 [DESCRIPTION] 抽象接口(Interface)是一种通过申明成员方法和操作符重载的方式 来抽象的定义一个对象支持的使 用方式。 一个对象要与一个接口兼容,它必须包含该接口所定义的所有方法和操作符。 接口是一种抽象 类型,因为它没法创建实例对象,而且它的所有成员方法 都是没有实现的抽象方法。 这里是个简单的可检查对象大小的借口: 1 interface HasSize 2 { 3 routine size()=>int 4 } 我们可以定义一个以该接口为参数的函数,这样我们就可以对任意支持 size()方法的对象调用该方法检 查它的大小: 1 routine PrintSize( object: HasSize ) 2 { 3 io.writeln( object.size() ) 4 } 这个函数可以string,list 或 map等为参数: 1 PrintSize( 'hello world' ) 2 PrintSize( { 1, 2, 3 } ); 接口也支持继承(包括多重继承): 1 interface Resizable : HasSize 2 { 3 routine resize( size :int ) 4 } 类似的: 1 routine Resize( object: Resizable, size: int ) 2 { 3 io.writeln( 'old size:', object.size() ) 4 io.writeln( 'new size:', size ) 5 object.resize( size ) 6 } 7 8 var ls = {} 9 Resize( ls, 5 ) 10 io.writeln( ls ) 接口也支持操作符重载。但是,内置的类型和操作符不能通过接口检查, 因为它们不以方法的形式实现。 因此接口最主要还是用于道类类型和封装的C/C++类型。 定义相同集合的成员方法的借口可互换, 1 interface HasSize2 2 { 3 routine size()=>int 4 } 5 routine PrintSize2( object: HasSize2 ) 6 { 7 o :HasSize = object; # assign an object of "HasSize2" to a variable of "HasSize"; 8 io.writeln( object.size() ) 9 } 10 PrintSize2( {} );