2013-12-21 47 views

回答

3

你不能。

您还可以从父执行:

super.someMethod(); 

但仅此而已。如果B定义了一个实现,那将会被调用。如果不是,A会被叫,但是你不能强制A被叫(绕过B)。

原因是因为C从B继承,所以在B中的实现是否使用A中的实现。可能有一个非常好的理由,为什么在A中应该使用而不是

如果你想C到使用A的实现,如果你需要的B部分代码直接从A继承,考虑到delegating B.

2

任何类只能使用super访问其直接父实例的实例。你不能访问祖父母。

这意味着您在C的成员函数中可以调用super.someMethod()。这将调用BsomeMethod()实现。但是,任何给定的对象都无法访问其祖父母的实例。

因此,您不能从C调用A.someMethod()执行。

0

作为设计,您可以在类A中声明someMethod()final,然后所有三者都拥有它,但不能更改实现。然后让这确实在B.

还是一个比较复杂的状况所需要的第二件事第二种方法,像这样一些重构的想法也可以帮助:http://www.refactoring.com/catalog/formTemplateMethod.html