接口实现的继承机制

转载 2007年09月25日 09:09:00
接口实现的继承机制
 
一个类继承了它的基类所提供的接口实现,如果不显示的重新实现接口,派生类就无法改变从基类中继承来的接口映射
案例
     interface IBase
     {
         void Paint();
     }
     class Control:IBase
     {
         public void Paint()
         {
              Console.WriteLine("Control.Paint");
         }
     }
     class test:Control
     {
         new public void Paint()
         {
              Console.WriteLine("test.Paint");
          }
     }
案例中test中的方法Paint覆盖了Control的方法Paint,但却没有改变Control.Paint对IBase.Paint的映射,并且在类的实例和接口的实例中对Paint方法的调用会产生以下结果
static void Main()
         {
              Control c = new Control();
              test t = new test();
              IBase ic =c;
              IBase it =t;
              c.Paint();
              t.Paint();
              ic.Paint();
              it.Paint();
         }
输出结果为
Control.Paint
test.Paint
Control.Paint
Control.Paint
 
也就是说test2的方法并没有改变IBase接口的映射
但是,当一个interface方法被映射到类的一个虚方法时,派生类就可以重载这个方法,并改变这个接口的实现。
也就是把上面的例子改成
     class Control:IBase
     {
         public virtual void Paint()
         {
              Console.WriteLine("Control.Paint");
         }
     }
     class test:Control
     {
         public override void Paint()
         {
              Console.WriteLine("test.Paint");
         }
 
     }
这样映射就发生了改变。
 
因为显示说明的接口成员不能被声明成虚,因此无法重载显示接口说明的实现。这时最好采用显示接口实现来调用另外一个方法,这个方法可以声明成虚,可以被重载
案例
     class Control:IBase
     {
         void IBase.Paint()
         {
              this.PaintControl();
         }
         public virtual void PaintControl()
         {
              Console.WriteLine("canrewrite");
         }
     }
     class test:Control
     {
         public override void PaintControl()
         {
              Console.WriteLine("berewrite");
         }
     }
这里显示接口成员可以执行可重载的方法PaintControl来实现重载
 

相关文章推荐

Java中的接口interface实现、与继承extends机制。

接口就是一些标准,把一些标准的制度写成方法,例如一个汽车必须有四个轮子,就可以把制造汽车写为一个接口,而制造四个轮子为接口必须方法,实现它的类就必须要实现制造四个轮子的方法。 语言、程序、框架的...

Java的类继承机制 -- 应用于接口系统测试

首先,我们需要正确解析Java的类继承机制,通过一个demo即可。 例:     学生信息处理     基类:学生,完成所有学生的通用的方法     职务类:担任了各种职务的学生,他们也是学生...

从c++的菱形继承到 C#的接口机制

在C++中,什么叫做钻石问题(也可以叫菱形继承问题),怎么避免它? 下面的图表可以用来解释钻石问题。 假设我们有类B...

通过反射机制获取位于同一个包下的接口的所有实现类

public class ClassUtils {      public static List getAllImplClassesByInterface(Class c) {      ...

模拟DbUtils实现接口回调机制

想必大家都用过apache 的DbUtils吧,这个简单的对JDBC的封装小框架真的是非常非常的适合新手的学习呢。逻辑上也不是很复杂,难度刚刚好。 下面我就模仿它来实现一个字符串的处理小框架。思路我的...

从字节码角度分析泛型类,泛型方法,泛型接口的实现机制(类型擦除)

在java中泛型本质上是个语法糖,跟C++不一样,java根本不会创建泛型类,一切都只不过是编译器通过类型擦除机制实现的障眼法而已,比如 源码: public classChildTest e...

Delphi 的接口机制浅探

  • 2008-03-24 14:29
  • 68KB
  • 下载

Delphi 的接口机制——接口操作的编译器实现过程(2)

接口对象的内存空间         假设我们定义了如下两个接口 IIntfA 和 IIntfB,其中 ProcA 和 ProcB 将实现为静态方法,而 VirtA 和 VirtB 将以虚方法实现...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)