2014-10-01 3 views
-1

나는 다음과 같은 수업을 가정 할자바 외부 별도의 클래스 액세스 익명 클래스

Class0

public abstract class Class0 { 

public Class0(){} 
    public void abmethod1(){ 
     System.out.println("Abstract method 1"); 
    } 

    public void abmethod2(){ 
     System.out.println("Abstract method 2"); 
    } 
} 

클래스 1

public class Class1 { 
    private List<Integer> aList; 

    public Class1(){ 
     this.aList= new ArrayList<>(); 
    } 

    public Integer getElementAt(int i){ 
     return this.aList.get(i); 
    } 

    public int getSize(){ 
     return this.aList.size(); 
    } 

    public void add(int num){ 
     this.aList.add(num); 
    } 
} 

Class2의

,451,515,
public class Class2 { 
    private Class0 c0; 
    private Class3 c3; 
    public Class2(){ 
     this.c0 = new Class0() { 
      Class1 c1 = new Class1(); 

      @Override 
      public void abmethod1(){ 
       System.out.println("Abstract method 1 called. Size is " + c1.getSize()); 
      } 

      @Override 
      public void abmethod2(){ 
       c1.add(1); 
       c1.add(2); 
       c1.add(3); 
       System.out.println("Abstract method 2 called. Size is " + c1.getSize()); 
      } 
     }; 
     this.c3 = new Class3(); 
     c3.methodc2(c0); 
    } 
} 

강좌 3

public class Class3{ 
    public void methodc2(Class0 c0){ 
     c0.abmethod1(); 
     c0.abmethod2(); 
    } 
} 

CLASS4 그런

public class Class4 { 
    private Class2 c2; 

    public Class4(){ 
     c2 = new Class2(); 
    } 
} 

Class5

public class Class5 { 
    private Class2 c2; 

    public void method2(){ 
     this.c2 = new Class2(); 
    } 
} 

I RU n은 메인 클래스

public class Class6 { 
    public static void main(String[] afg){ 
     Class4 c4 = new Class4(); 
     Class5 c5 = new Class5(); 
     c5.method2(); 
    } 
} 

그리고

Abstract method 1 called. Size is 0 
Abstract method 2 called. Size is 3 
Abstract method 1 called. Size is 0 
Abstract method 2 called. Size is 3 

그래서 내가 (여기에 3 인) 내가 강좌 3 내부 익명 클래스를 호출 할 때마다 내 목록의 마지막 크기를 가지고 할 메시지를 얻을. 당신의 목표 인 경우 어떻게 내가 Class2의 모든 인스턴스가 Class0의 동일한 인스턴스를 공유하는 것이라고 출력을 할 수 있도록

Abstract method 1 called. Size is 0 
Abstract method 2 called. Size is 3 
Abstract method 1 called. Size is 3 
Abstract method 2 called. Size is 6 

사전

+1

당신의 코드를 더 들여 쓰면 코드를 들여 쓰는 것이 정말 도움이 될 것입니다. (저는 지금 당장 당신을 위해 해주었습니다 만, 장래에 자신을 포매팅하는 것에 더 많은주의를 기울이십시오.) –

+0

죄송합니다, 어떻게 들여 쓰기를 할 것인지 모르겠습니다. 공백과 스타일에 문제가 있습니까? –

+0

내 편집 전에 어떻게 보 였는지 비교해보십시오. 들여 쓰기를 수행하는 IDE를 사용하는 경우에는 들여 쓰기가없는 클래스 선언 바로 아래에 메서드 선언이 있음을 매우 의심합니다. –

답변

1

에 감사 Class0의 새로운 인스턴스를 생성하는 것을 방지 할 수 있습니다 c0 구성원을 Class2 정적으로 만들면이 효과를 얻을 수 있습니다. 이 경우 c0 변수를 생성자 대신 정적 초기화 블록에 초기화합니다.

public class Class2 { 
    private static Class0 c0; 
    private Class3 c3; 
    static 
    { 
     Class2.c0 = new Class0() { 
      Class1 c1 = new Class1(); 

      @Override 
      public void abmethod1(){ 
       System.out.println("Abstract method 1 called. Size is " + c1.getSize()); 
      } 

      @Override 
      public void abmethod2(){ 
       c1.add(1); 
       c1.add(2); 
       c1.add(3); 
       System.out.println("Abstract method 2 called. Size is " + c1.getSize()); 
      } 
     }; 
    } 
    public Class2(){ 
     this.c3 = new Class3(); 
     c3.methodc2(c0); 
    } 
} 

이 모든 것이 의미가 있는지 여부는 코드의 목적을 알지 못하면서 말하기 어렵습니다.

+0

글쎄, 그것은 더 복잡합니다. 나는 JTable을 가지고 있고 셀을 클릭 할 때마다 목록에 셀 좌표를 넣고 싶다. 그 후, 나는 단추를 누르고 그 셀을 색깔로 채색한다. 하지만 나는 색칠 할 수 없다. 왜냐하면 나는 목록 크기가 0이되기 때문이다! :-) –