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

7 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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Pat*_*han 7

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

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

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


bsi*_*nau 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

类似问题:

  • 如果不破坏鸡蛋,您就无法破坏 OOP 原则。 (7认同)