在多级继承中从子类调用'grand'父函数

时间:2013-03-11 08:07:42

标签: java inheritance superclass

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的方法,则会设置该标志。但是这个序列变得非常复杂。

2 个答案:

答案 0 :(得分:7)

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

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

理想情况下,父walk()将获得一个新名称,反映其与GrandParent walk()的功能有何不同。然后可以从Child类调用每个函数。

答案 1 :(得分:4)

您可以指定访问父值的方法,如下所示:

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

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

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

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

类似的问题: