7

例:

class MainClass {
    public doIt() {
        ...
        else doIt();
    }
}

class SubClass extends MainClass {
    @Override
    public doIt() {
        super.doIt();
        ...
    }
}

問題は次のとおりです。

  • SubClass.doIt() を呼び出します
  • MainClass.doIt() が呼び出されます
  • MainClass.doIt() は doIt() を呼び出す再帰を作成します
    ただし: MainClass.doIt() の代わりに SubClass.doIt() が呼び出されます

それは非常に奇妙な振る舞いであり、問​​題はプログラムされています! this.doIt() で再帰を呼び出そうとしましたが、役に立ちませんでした。誰かがアイデアを持っていますか?

ご回答ありがとうございます。この問題は解決しました。

4

2 に答える 2

1
public class Main {

    public static void main(String[] args) {
        B b = new B();
        b.doIt();
        System.out.println();
        A a = new B();
        a.doIt();
    }


    public static class A{
        boolean check=false;
        public void doIt(){
            System.out.println("A start");
            if(check){

            }
            else{
                check = true;
                doIt();
            }
            System.out.println("A end");
        }
    }
    public static class B extends A{
        @Override
        public void doIt() {
            System.out.println("B start");
            super.doIt();
            System.out.println("B end");
        }
    }
}

この例では、bとの両方aが class のインスタンスであるBため、おそらく予想どおり、 a.doIt() と b.doIt() は同じ結果を出力します。

B start
A start
B start
A start
A end
B end
A end
B end

B start
A start
B start
A start
A end
B end
A end
B end

を呼び出すときdoIt()は、暗黙的に を呼び出してthis.doIt()おりthis、 クラス のインスタンスですB。コンテンツを分離せずにやりたいことを行う構文はありませんdoIt()(CommuSoftの回答を参照)

于 2015-02-19T19:13:41.960 に答える