2016-05-21 9 views
-1

内部クラスのオブジェクトは、そのクラスを囲むオブジェクトからのみ発生することがわかります。だから、内部クラスのオブジェクトが、囲むクラスの定義の外に、囲むクラスの非静的メソッドを呼び出すことができないのはなぜですか?外部クラスの定義外で、内部クラスのオブジェクトを持つ外部クラスのメソッド(非静的)を呼び出すのはなぜですか?

public class OuterClass 
{  
public class InnerClass 
    { 
     public void innerMethodA() 
     { 
      outerMethodA(); // This is OK. 
      new InnerClass().outerMethodA(); // This is not OK. 
     } 
    } 

    public void outerMethodA() 
    { 
     System.out.println("This is OuterMethodA"); 
    } 
} 

public class ExtraClass 
{ 
    public void testMethod() 
    { 
     OuterClass outerObj = new OuterClass(); 

     OuterClass.InnerClass innerObj = outerObj.new InnerClass(); 

     outerObj.outerMethodA(); // This is OK. 
     innerObj.outerMethodA(); // This is not. Why is that? 
    } 
} 

フォーマットの間違いや、私の質問を進めていることをお詫び申し上げます。私はいくつかの下投票の後にそれを編集しました。最善を尽くした。ありがとうございました。

+1

これはコードが必要だと思います。私は本当にあなたが何を意味するかは分かりません。 – markspace

+2

非静的メソッドと呼ばれるクラスのインスタンスが必要です。内部クラスは、それが囲まれているという理由だけで魔法のようにそのインスタンスを持っていません –

+0

なぜこのようなことをしたいですか?この疑問の背後にある原動力は何ですか?これはどんな状況で意味がありますか? –

答えて

0

このスタックオーバーフローに関する質問では、(実際には)内部クラスから囲むクラスを取得することはできません。

get the enclosing class object from anonymous inner class as function parameter

私が見る唯一の解決策は、あなたのための呼び出しを行うInnerClassの方法を提供することにあります。

class OuterClass 
{ 

    public class InnerClass 
    { 
     public void innerMethodA() 
     { 
     outerMethodA(); // This is OK. 
     enclosingInstanceMethodA(); // This is OK now. 
     } 

     public void enclosingInstanceMethodA() 
     { 
     OuterClass.this.outerMethodA(); 
     } 
    } 

    public void outerMethodA() 
    { 
     System.out.println("This is OuterMethodA"); 
    } 
} 

class ExtraClass 
{ 

    public void testMethod() 
    { 
     OuterClass outerObj = new OuterClass(); 
     OuterClass.InnerClass innerObj = outerObj.new InnerClass(); 
     outerObj.outerMethodA(); // This is OK. 
     innerObj.enclosingInstanceMethodA(); // This is OK now. 
    } 
} 
関連する問題