pojia

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
   当一个接口被一个基类实现,此基类又被另外一个类继承;例如:
interface ITest{
  void test();
}
class BClass:ITest{
public  void test(){------}
}
class CClass:BClass{
public new  void test(){------}
}
CClass的test()没有改变BClass.test()到借口ITest.test方法的映射:
例如:
BClass b=new BClass();
CClass c=new CClass();
ITest ib=b;
ITest ic=c;
//
b.test(); //调用BClass().test();
c.test(); //调用CClass().test();
ib.test(); //调用BClass().test();///////为什么了!因为一个派生类不能改变从基类继承来的接口映射
ic.test(); //调用BClass().test();

但是当基类中的一个虚拟方法实现对借口的影射时,此积累又被另外一个类继承,并且此派生类有方法override基类方法,那么,通过派生类取得的接口实例将改变接口的映射,改变成从派生类映射接口;
例如:
interface ITest{
  void test();
}
class BClass:ITest{
public virtual  void test(){------}
}
class CClass:BClass{
public override  void test(){------}
}
派生类改变映射;
BClass b=new BClass();
CClass c=new CClass();
ITest ib=b;
ITest ic=c;
//
b.test(); //调用BClass().test();
c.test(); //调用CClass().test();
ib.test(); //调用BClass().test();
ic.test(); //调用CClass().test();////为什么了!因为派生类方法CClasss.test()映射到接口

posted on 2005-11-30 16:36  破甲  阅读(230)  评论(0编辑  收藏  举报