2013-06-05 5 views
4

사용자가 특정 단추를 클릭 할 때 서버 연결을 설정하는 코드가 있습니다. 나는 행동을 듣기 위해 내부 클래스를 만들었다. 내부 클래스에있는 단일 메서드 내에서 앞서 언급 한 해당 서버 연결도 설정합니다.외부 클래스가 내부 클래스의 메서드를 호출 할 수 있습니까?

제 질문은 소켓 연결을 "내부"클래스에서만 활용할 수 있습니까? 또는 외부 클래스가 상기 서버와의 통신을 진행할 수 있습니까?


는 외부 클래스 것처럼 나는, 그러나, (내부 클래스는 외부 클래스에 제한없이 액세스 할 수 있는지 이해한다. 내 질문은 주위에 다른 방법입니다.

+1

예, 외부 클래스의 인스턴스 메서드를 호출 할 수 있습니다내부 클래스의 인스턴스에서. –

+0

예, 답을 게시 할 때 질문에 대한 오해가있었습니다. 물론 당신은 이것을 할 수 있습니다. [외부 클래스의 내부 클래스의 비공개 필드에 액세스 할 수도 있습니다.] (http://stackoverflow.com/questions/1801718/why-can-outer-java-classes-access-inner-class-private-members). – Zong

+0

사이드 노트 : 조슈아 블로흐 (Joshua Bloch)의 "효과적인 자바"에는 중첩 된 클래스에 관한 화려한 장이 있습니다. – monika

답변

7

당신이 원하는 것을 다음과 같이 인스턴스를 만들고 액세스합니다.

OuterClass.InnerClass innerObject = outerObject.new InnerClass(); 
+3

나는이 질문에 대답하지 않는다고 생각합니다 ... –

2

모든 메소드 선언 내부 클래스에 ... 그들은 public 또는 선언 여부 ... 접근 있습니다 private.

내부 방법 그들은 항상 외부 클래스의 코드를 사용하여 호출 할 수 있습니다 static 경우. 당신에게 단지 북동 메소드 이름을 내부 클래스 이름으로 한정하기 위해 사용되었습니다.

외부 클래스 코드는 내부 클래스의 인스턴스에 대한 메서드에 대한 참조가 필요합니다. (하지만 그게 정상입니다.)


(당신이 내부 클래스는 외부 클래스에 메서드를 호출 할 수 있는지에 대해 묻는다면, 그것은 위의 대부분이 적용됩니다. 조금 더 복잡하지만 내부 클래스 인 경우 NOT static 그것을 할 수 this를 통해 바깥 클래스에 또한 호출 인스턴스 메소드)

+0

'외부 클래스는 내부 클래스의 private 메소드에 액세스 할 수 있습니다. '- 이것은 의도적으로 설계된 것입니까, 아니면 이에 대한 특별한 이유가 있습니까? –

+0

의도적으로 설계된 동작입니다. (강한) 캡슐화 경계는 가장 바깥 쪽 클래스입니다. –

관련 문제