2014-12-10 9 views
0

다른 클래스를 확장하는 외부 클래스가있는 클래스 내에 두 개의 중첩 클래스가 있습니다. 구조는 이와 같습니다.생성자에서 'this'키워드를 사용하여 다른 클래스의 한 클래스의 메서드 사용

public class EXTENSION_CLASS 
    { 
     public int Get_Value() 
     { 
      return(100); 
     } 
    } 

    public class OUTER extends EXTENSION_CLASS 
    { 
     public static class NESTED1 
     { 
      public void Method1() 
      { 
       int value=0; 
       value=Get_Value(); 
       System.out.println("Method1: "+value); 
      } 
     } 
     public static class NESTED2 
     { 
      NESTED1 Nested1_Instance=new NESTED1(); 
      public void Method2() 
      { 
       Nested1_Instance.Method1(); 
      } 
     } 
     public void run() 
     { 
      NESTED2 Nested2_Instance=new NESTED2(); 
      Nested2_Instance.Method2(); 
     } 
     public static void main (String[] args) 
     { 
      OUTER New_Class=new OUTER(); 
      New_Class.run(); 
     } 
    } 

"Method1 : 100"출력이 필요합니다. 하지만 출력을 얻고 : "OUTER.java:16 : 오류 : 비 정적 메서드 Get_Value() 정적 컨텍스트에서 참조 할 수 없습니다. 값 = Get_Value();". 어떻게하면 효과가 있습니까?

건배!

라제 쉬.

+0

어떤 문제가 발생했는지 알 수 있습니까? 나는 같은 프로그램으로 해봤 다. – gprathour

+0

이것은 나를 위해 일하고있다, 뭐가 문제 야? –

+0

죄송합니다. 실제 문제를 제시하는 프로그램을 업데이트했습니다. 답장을 보내 주셔서 감사합니다. –

답변

1

한 가지 방법은 NESTED2에 NESTED1 인스턴스를 갖는 것입니다. 클래스 구조를해야

private static class NESTED2 
    { 
    private NESTED1 nested1; 
    public NESTED2 (NESTED1 nested1) { 
     this.nested1 = nested1; 
    } 
    public void Method2() 
    { 
     nested1.Method1(); 
    } 
    } 
+0

빠른 답장을 보내 주신 Chris에게 감사드립니다! –

1
private static class NESTED2 
{ 
    public void Method2(NESTED1 nested1Instance) 
    { 
    nested1Instance.Method1(); 
    } 
} 

예를 들면 다음과 같습니다. 대신, 이렇게 수정하면 ....

private static class NESTED1 
{ 
    public *statc* void Method1() 
    { 
    ... 
    } 
} 
private static class NESTED2 
{ 
    public *static* void Method2() 
    { 
    NESTED1.Method1(); 
    } 
} 

... 개체를 만들지 않고 도망 갈 수 있습니다.

정적 메서드를 만들면 먼저 클래스 개체를 인스턴스화 (생성) 할 필요가 없습니다.

+0

답장을 보내 주셔서 감사합니다. –