2012-07-21 5 views
3

내부 클래스에서 변수를 private로 선언하면 변수가 외부 클래스에서 볼 수 있습니다. 나는 여기서 논리를 이해할 수 없다. 이상적으로 내부 클래스에서만 액세스 할 수 있어야하지 않습니까?외부 클래스에서 내부 클래스의 변수에 액세스 할 수있는 이유는 무엇입니까?

+1

@ wrschneider99 나는이 질문이 다르다 고 생각한다. 이유는 무엇인가? (언어 디자인 질문을 만든다.) –

+0

예, 나는 실제로 여기 디자인에 의문을 제기하고 있었다. 나는 innerclass 변수에 접근하는 것이 가능하다는 것을 알고 있지만, 왜 그들이 같은 것을 할 것인지를 알아 내기 위해 노력하고있다. – user1527107

+0

나는 이미 여기에 물어 보았다고 생각한다. 물어보기 전에 약간의 연구를 해보 라. http://stackoverflow.com/questions/1801718/why-can-outer-java-classes-access-inner-class-private-members – Scorpion

답변

0

기본적으로 질문이 Sun/Oracle의 언어 디자이너가 특정 행동을 허용하기로 결정한 이유를 묻는 것 같기 때문에 답은 주관적이라고 생각합니다. 여기에 대한 답변에서 시도했다

...

우선 몇 가지 용어, 클래스 내에서 선언 된 클래스는 중첩 된 클래스입니다. 내부 클래스는 외부 클래스의 인스턴스 내에 있어야하는 비 정적 중첩 클래스입니다. 따라서 내부 클래스는 외부 클래스의 일부이며 그 의미에서 내부 클래스의 모든 멤버는 외부 클래스의 멤버입니다.

http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

인스턴스 메소드와 변수와 같이, 내측 클래스 포위 클래스의 인스턴스와 관련된 해당 객체의 메소드와 필드에 직접 액세스를 갖는다. 또한 내부 클래스는 인스턴스와 연결되어 있으므로 정적 멤버 자체를 정의 할 수 없습니다.

또 다른 생각은 내부 클래스에 대한 유효한 사용 사례가 내부 클래스가 외부 클래스의 멤버를 숨길 수있게하는 필요성을 배제한다는 것입니다. 즉, 외부 클래스가 내부 클래스에 연결되지 않는다는 개념은 없습니다.

private을 허용하는 이유는 무엇입니까? 전용 멤버는 내부 클래스의 인스턴스에 액세스 할 수있는 다른 클래스에서 숨길 수 있기 때문에

관련 문제