2013-12-21 45 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