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