10

クラスとインナークラスを取得しました

01 public class A{
02   void test(){};
03   public class B{
04     void test(){
05       test();
06     }
07   }
08 }

わかりました。05行目でidはクラスAのメソッドテストにアクセスするのが好きです。しかし、クラスAのメソッドを使用するように指定する方法がわからないため、ループに入ります。

何か案は?

4

4 に答える 4

17
01 public class A{
02   void test(){};
03   public class B{
04     void test(){
05       test();  // local B.test() method, so recursion, use A.this.test();
06     }
07   }
08 }

EDIT:@Thiloが述べたように:外部クラスと内部クラスで同じメソッド名を使用しないでください。これにより、名前の競合が回避されます。

于 2012-08-27T09:16:37.877 に答える
6

あなたはそのようなことをすることができます:

public class A{
   void test(){
        System.out.println("Test from A");
    };
    public class B{
        void test(){
            System.out.println("Test from B");
            A.this.test();
        }
    }

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

次に、次の出力があります。

Test from B
Test from A
于 2012-08-27T09:22:18.720 に答える
0

クラス B は、クラス A を拡張するために、いわゆるネストされたクラスである必要はありません。

public class B extends A {
...

}

A の test() のように呼び出すことができるよりも

super.test()

あなたが行うように test() を呼び出すと、それは再帰的と呼ばれるものであり、審判の日までフリーズします

于 2012-08-27T09:16:28.003 に答える
0

静的にすると、呼び出すことができます

A.test()

それ以外の場合は、B で使用する A のインスタンスが必要です

A a;
a.test();
于 2012-08-27T09:17:01.887 に答える