2012-08-27 18 views
6

私は、クラスを持って、サブクラスインナークラスのアクセス、同じメソッド名

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

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

アイデア?

+2

これはサブクラスではありません。この構造体を本当に望むなら、 'A.this.test()'が機能します。 – Thilo

+0

@Thiloあなたは正しい、その内部クラスです。申し訳ありません4その –

答えて

13
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として、注意:外部クラスと内部クラスで同じメソッド名を使用しないようにしてください。名前の競合が回避されます。

+3

+1。おそらくより良い解決策は、メソッド名を矛盾しないように変更することだけです。 – Thilo

+0

一般に、あなたは同じメソッド名を避けるのは当然ですが、私のケースは既存のインスタンスからのジェネレータdelegator-class用のFreemarker Hibernate Templateです。 –

+0

私自身のコードでこれを試してみましたが、「静的でない変数から静的なコンテキストから参照できません。そして、私がAを落とすと、this.test()(と私はテストからの何か)になります。私は 'シンボルを見つけることができません'ということになります。それは私がエラーを引き起こす戻り値を持っているかどうかであり、もしそうであれば、外部関数から値を内部関数に戻すにはどうすればよいのでしょうか? – NSaid

0

を呼び出す場合は、

super.test() 

のような)(Aのテストを呼び出すことができますよりも、クラスBは、クラスAがちょうど

public class B extends A { 
... 

} 

を書く拡張するために、ネストされたクラス、いわゆるである必要がありますされませんテスト()あなたがそれを行うように、それは我々が再帰的と呼んでいるものだと判断

0

あなたはそれが静的なあなたはあなたがそのような何かを行うことができますBに

A a; 
a.test(); 
5

を使用するAのインスタンスが必要

A.test() 
エルス

を呼び出すことができ作る場合:

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 
関連する問題