2014-10-16 2 views
0

외부 클래스에서 private로 표시된 생성자가있는 내부 클래스의 인스턴스를 초기화 할 수 있습니까? 일단 생성자가 private으로 선언되면 아무도 클래스 자체에서 제외하고 클래스의 인스턴스를 만들 수 없다는 인상하에있었습니다. 예내부 클래스의 private construtor가 외부 클래스로 초기화됩니다.

Public class Outerclass 
    { 
     newinstance = new Innerclass(); 

     private final class InnerClass 
     { 
     private InnerClass(//paremeters) 
     { 
      //constructor declaration inside 
      } 
     } 
    } 

답변

2

내부 클래스는 외부 클래스의 멤버입니다.

내부 클래스의 액세스 마커는 관련없는 클래스에만 적용됩니다. 그리고 내부 클래스가 자체적으로 사적인 클래스이기 때문에 외부 클래스에서 생성 할 수 있습니다.

+0

은 의미가 있습니다. 감사합니다. – lboyel

0

나는 당신이 싱글 톤 패턴을 조사 할 필요가 있다고 생각한다. 생성자가 private로 표시된 클래스의 인스턴스를 선언 할 수는 없지만 private 속성을 사용하여 해당 클래스에서 항상 정적 메서드를 선언 할 수는 있습니다. 따라서 내부 클래스의 정적 메서드를 호출하면 해당 클래스의 인스턴스 하나만을 호출자에게 반환합니다. 그들은 모두 다른 멤버에 대한 전체 액세스 권한을 가지고 있고, 다른 모든 구성원이 그들에게 모든 권한을 가질 수 있도록

http://en.wikipedia.org/wiki/Singleton_pattern

+1

일부 클래스를 인스턴스화하는 정적 메서드를 사용한다고해도이 클래스의 인스턴스는 하나만 존재하므로 단일 패턴이 아닙니다. – Dici

+1

외부 클래스는 항상 내부 클래스 멤버에 액세스 할 수 있습니다. 그리고 내부 (정적이 아닌 중첩 된) 클래스에서 정적 메서드를 선언 할 수 없습니다. – RealSkeptic

0

당신은 내부 클래스를 인스턴스화 할 수 있습니다 외부 클래스에 공개 방법을 정의 할 수 있습니다

public void instantiateInnerClass() { 
    myAttribute = this.new InnerClass(); 
} 

그러나 액세스하고 직접 내부 클래스의 인스턴스를 조작 할 수 없습니다.

관련 문제