2013-06-19 3 views
12

내 코드에 내부 클래스가 있습니다. 인스턴스에 공개 액세스 권한을 부여하려고하지만 외부 클래스에서만 "개인"액세스와 같이이 인스턴스를 생성 할 수 있어야합니다. 제대로 된 패키지를 만들지 않고 (또는 모든 내부 클래스에 대한 공용 인터페이스를 만들지 않고도) 가능합니까?Java - 내부 클래스 생성자 - 외부 클래스에만 허용

(미안 내 영어가 나쁜 경우 : P) 기본적으로

답변

23

것이 가능하다 바랍니다. 귀하의 public 클래스를 선언하지만 생성자 private을 선언하십시오. 이렇게하면 외부 클래스가 아닌 내부 클래스와 내부 클래스에서만이 클래스를 만들 수 있습니다.

+1

정말 외부 클래스가 내부 클래스의 전용 필드에 액세스 할 수 있습니까? 고마워, 고마워! –

+0

그래서이 해결책은 잘못 되었습니까? –

+1

아니요,이 해결책은 옳습니다. 외부 클래스는 내부 클래스의 모든 private 필드, 메서드 및 생성자를 볼 수 있습니다. – WilQu

1

, 당신은 당신이 먼저 외부 클래스를 가질 필요가 내부 클래스의 인스턴스를 얻고 싶다면.

inner class은 해당 클래스의 멤버입니다.

아무 것도 할 필요가 없습니다.

비 정적 중첩 클래스 (내부 클래스)는 그들이 내가 올바른 방법으로 귀하의 질문을 이해 바랍니다

개인 선언 된 경우에도, 바깥 쪽 클래스의 다른 멤버에 액세스 할 수 있습니다.

refer.

+0

생성자는 외부 클래스 (때문에 공개 할 수 없음)를 위해 사용할 수 있어야 개인이기 때문에

public class Outer { private class Inner {} public String foo() { return new Inner().toString(); } } 

당신은 법적으로 개인 기본 생성자를 호출 할 수 있지만이 사용 가능해야한다 바깥 쪽의 객체 (그래서 클래스는 private 일 수 없다). –

0

내부 클래스의 private을 작성하십시오. 이

+0

Inner가 비공개 인 경우 Outer에서 사용할 수 없습니다. 이 클래스에 대한 공개 인터페이스를 만들 수 있지만, 더 좋은 것이 있으면이 솔루션을 피하고 싶습니다. –

+0

이 질문의 해결책은 '외부 클래스 만이이 인스턴스를 생성 할 수 있어야합니다.'입니다. 당신은 당신이 정말로 원하는 것을 당신의 질문을 정교하게 만들 수 있습니까 !! 그것은 명확하지 않다. – iMBMT

+0

'Outer' 객체 만이'Inner '인스턴스를 생성 할 수 있어야합니다. 지금은 분명합니까? 죄송합니다 :) –

관련 문제