实现接口5

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 jfbao 的 blog

4、映射接口

  类必须为在基类表中列出的所有接口的成员提供具体的实现。在类中定位接口成员的实现称之为接口映射(interface mapping )。

  映射,数学上表示一一对应的函数关系。接口映射的含义也是一样,接口通过类来实现,那么对于在接口中定义的每一个成员,都应该对应着类的一个成员来为它提供具体的实现。

  类的成员及其所映射的接口成员之间必须满足下列条件:

  1、如果a和b都是成员方法,那么a和b的名称、类型、形参表(包括参数个数和每一个参数的类型)都应该是一致的。

  2、如果a和b都是属性,那么a和b的名称、类型应当一致,而且a和b的访问器也是类似的。但如果a不是显式接口成员执行体,a允许增加自己的访问器。

  3、如果a和b都是时间那么a和b的名称、类型应当一致。

  4、如果a和b都是索引指示器,那么a和b的类型、形参表(包括参数个数和每一个参数的类型)应当一致。而且a和b的访问器也是类似的。但如果a不是显式接口成员执行体,a允许增加自己的访问器。

  那么,对于一个接口成员,怎样确定由哪一个类的成员来实现呢?即一个接口成员映射的是哪一个类的成员?在这里,我们叙述一下接口映射的过程。假设类c实现了一个接口iinterface,member是接口iinterface中的一个成员,在定位由谁来实现接口成员member,即member的映射过程是这样的:

  1、如果c中存在着一个显式接口成员执行体,该执行体与接口iinterface 及其成员member相对应,则由它来实现member 成员。

  2、如果条件(1)不满足,且c中存在着一个非静态的公有成员,该成员与接口成员member相对应,则由它来实现member 成员。

  3、如果上述条件仍不满足,则在类c定义的基类列表中寻找一个c 的基类d,用d来代替c。

  4、重复步骤1-- 3 ,遍历c的所有直接基类和非直接基类,直到找到一个满足条件的类的成员。

  5、如果仍然没有找到,则报告错误。

  下面是一个调用基类方法来实现接口成员的例子。类class2 实现了接口interface1,类class2 的基类class1 的成员也参与了接口的映射,也就是说类class2 在对接口interface1进行实现时,使用了类class1提供的成员方法f来实现接口interface1的成员方法f:

interface interface1 {
 void f( ) ;
}
class class1 {
 public void f( ) { }
 public void g( ) { }
}
class class2: class1, interface1 {
 new public void g( ) {}
}

  注意:接口的成员包括它自己定义的成员,而且包括该接口所有父接口定义的成员。在接口映射时,不仅要对接口定义体中显式定义的所有成员进行映射,而且要对隐式地从父接口那里继承来的所有接口成员进行映射。

本文关键:实现接口5
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top