关于java:在多级继承中从子类调用’grand’父函数

Call 'grand' parent function from child class in multi-level inheritance

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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()中,我只想在某些情况下使用grandorrent.walk()。我该怎么做?因为super.walk()将始终使用parent.walk()。

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

注2:请仅说明是否有标准的程序。我在父类中使用了一个标志,如果子类要使用祖父母的方法,它将设置该标志。但这个序列变得非常复杂。


这里的问题在于调用父函数"walk"的决策。它不应该被称为"行走",除非它打算完全替代祖父母walk()

如果不能改变这个决定,那么@zvzdhk现有答案中建议的解决方案是最好的。

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class GrandParent
{
    public void walk()
    {
        ...
    }
}

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

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

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

类似问题:

  • Java:如何访问父类方法两个级别?
  • 为什么是Super?Super?方法();在Java中不允许?