java如何在实现父方法的同时扩展类

时间:2013-12-21 20:14:52

标签: java inheritance

我有class Aclass B继承class Aclass C继承class B

并且所有类都有这个方法:

public void someMethod();

如何从class C调用此方法,以便实现class A的方法?

3 个答案:

答案 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

相关问题