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

ここでの問題は、親関数を「ウォーク」と呼ぶ決定にあります。それがGrandParentの完全な機能的代替であることが意図されていない限り、それは「ウォーク」と呼ばれるべきではありませんでしたwalk()

その決定を変更できない場合は、@zvzdhkからの既存の回答で提案されている解決策が実行可能な最善の方法です。

理想的には、親walk()には、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 に答える