我有class A
,class B
继承class A
,class C
继承class B
,
并且所有类都有这个方法:
public void someMethod();
如何从class C
调用此方法,以便实现class A
的方法?
答案 0 :(得分:3)
你不能。
您可以从父级调用实现:
super.someMethod();
但这就是全部。如果B定义了一个实现,那就是将被调用的实现。如果没有,A将被调用,但你不能强制调用A(绕过B)。
原因是因为C继承自B,所以无论是否使用A中的实现,都取决于B中的实现。可能有一个很好的理由说明为什么A中的实现应该不。
如果您希望C使用A的实现,请直接从A继承。如果您需要B中的某些代码,请将delegating考虑为B的实例。
答案 1 :(得分:2)
任何类只能使用super
访问其直接父级的实例。你不能访问祖父母。
这意味着在C
的成员函数中,您可以调用super.someMethod()
。这将调用B
的{{1}}实现。但是,任何给定对象都无权访问其祖父母的实例。
因此,您无法从someMethod()
调用A.someMethod()
实施。
答案 2 :(得分:0)
作为设计问题,您可以在A类中声明someMethod()
final
,然后三者都拥有它,但无法更改实施。然后有第二种方法,它可以完成B中所需的第二种方法。
或者对于更复杂的情况,像这样的一些重构想法也可能会有所帮助:http://www.refactoring.com/catalog/formTemplateMethod.html