override 那点链式传递性

看上面的代码:F2 在 C1、C2 中均有,F3 只在 C1 中有。

调用代码:

结果是:F1-3 和 F1-1。也就是说:

  • F2 响应到了 override,它调用的 F1 实际是 C3 中的方法;
  • F3 由于中间在 C2 中没有,断了,没有响应到 oveeride,它调用的 F1 就不是 C3 中的方法,而是 C1 中的方法。

由此看来 override 是不具有传递性的,他只对其基类负责(只覆盖基类的),至于其基类的基类,他管不了那么远。

如果 C2 中 F2 通过 base.F2() 来调用,那么它也不会被覆盖,因为这等效于调用 C1 的 F2 方法。

可以验证

如上代码,结果是:F1-1、F1-3,说明 C1 类型时,覆盖并没有起作用,因为它没有调用到 C3 的 F1。

你可能感兴趣的