假设类A继承自类B,而类B继承自类C.现在假设已经在A中定义了虚方法void f(),它在B和C中都被重写.从A中的任何方法调用Bf()可以通过简单地使用base.f()来完成.如何从A中的方法调用Cf()?
Jas*_*rue 11
通常,通过覆盖类,您接受它提供接口和您想要的一些行为.A不应该知道它的超级超级,除非它的超类以某种方式明确暴露.这实际上是可取的,因为当你继承B时你不需要知道C是如何实现的.你甚至不应该知道C涉及到了.
如果b的f()调用base.f(),则a的base.f()只需调用自己的base.f()就可以了.如果没有,那么自己做的唯一方法就是通过基于Reflection的侵入式方法.如果您发现自己需要这样做,那么您的设计可能会出错(违反了Demeter法则).