8
public class GrandParent
{
    public void walk()
    {
        ...
    }
}

public class Parent
{
    public void walk()
    {
        ...
    }
}

public class Child
{
    public void walk()
    {
        // Here in some cases I want to use walk method of GrandParent class
    }
}

现在在 Child.walk() 中,我只想在某些情况下使用 GrandParent.walk()。我怎样才能做到这一点?由于 super.walk() 将始终使用 Parent.walk()。

注意:(请注意,这是一个复杂场景的简化示例)

注意2:请仅说明是否有这样做的标准程序。我在父类中使用了一个标志,如果孩子想使用 GrandParent 的方法,则设置该标志。但是这个序列变得非常复杂。

4

2 回答 2

7

这里的问题在于决定调用父函数“walk”。它不应该被称为“walk”,除非它旨在成为 GrandParent 的完整功能替代品walk()

如果无法更改该决定,那么@zvzdhk 现有答案中建议的解决方案是可以做到的最好的解决方案。

理想情况下,Parentwalk()将被赋予一个新名称,以反映其功能与 GrandParent 的任何不同之处walk()。然后可以从 Child 类调用每个函数。

于 2013-03-11T08:29:16.563 回答
6

您可以像这样指定访问父值的方法:

public class GrandParent
{
    public void walk()
    {
        ...
    }
}

public class Parent
{
    public void walk()
    {
        ...
    }

    public void grandParentWalk()
    {
        super.walk();
    }
}

public class Child
{
    public void walk()
    {
        grandParentWalk();
    }
}

类似的问题:

于 2013-03-11T08:10:04.843 回答