2011-01-25 4 views
1

안녕하세요, 저는 C++에서 friend 함수의 행에 메소드를 구현하려고합니다. 나는 그것에 대해 어떻게 갈 수 그렇지 않은 경우, 왜 자바가 필요하지 않습니다를 구현하는 방법을 제안 해주세요 .. 샘플에서 같이?친구 함수의 라인에있는 모든 것이 java에 있습니까?

public class A {//some variables and methods..private and protected to be used by methods in Class B} 
public class B {} 
+1

자바에는 친구 기능이 없습니다. 그러나 유스 케이스를 제공하면 해결 방법이 있어야합니다. BTW, 내 '친구'가 내 '비공개'멤버에 액세스하는 것을 좋아하지 않습니다. (말장난 의도) – Nishant

+0

가능한 중복 : http://stackoverflow.com/questions/4647599/why-friend-directive-is-missing-in-java/4647901 –

+0

해당 중복 없음. 나는 그것을 구현하는 방법을 묻습니다. 코드 – garima

답변

2

예, 무언가가 존재한다. 동일한 패키지에 선언 된 Java 클래스는 패키지 멤버가 아닌 개인 멤버에 액세스 할 수 있습니다.

이것은 Java와 C++이 실제로 갈라지는 장소 중 하나이며, 발에서 자신을 촬영하지 않도록 Java 방식을 구체적으로 이해해야합니다.

+0

개인 회원을 액세스 할 수 없습니다. 그들은 할수 있나? – Nishant

+0

@Nishant, 그들은 할 수 없지만 또 다른 것이있다. 중첩 된 클래스와 내부 클래스는 최상위 레벨 클래스까지 private 멤버에 액세스 할 수있다. –

+2

@ Sergey Tachenov 나는 동의한다. 그리고, C++에서'friend' 수정자를 사용하여 수행 할 수있는 것은 없으며 _something else_를 사용하여 Java에서 수행 할 수 없습니다. 제가 여기서 지적하고있는 것은, 자바에서는 C++의 '친구'가주는 완전한 기능을 제공하는 하나의 키워드 또는 메커니즘이 없다는 것입니다. 당신은 다루고있는 유스 케이스를 기반으로 툴을 선택해야한다. (이 대답이나 내부 클래스 또는 다른 것들에서 제안 된 것과 같다). – Nishant

0

C++에서 친구를 갖는 것은 사실 OO 디자인 원칙에 위배됩니다. 그것의 convinience 그러나 그때 당신이 옳은 길을 pedant하지 않으면.

Java에서 더 좋은 방법은 위의 게시물에서 제안한 것과 같이 내부 클래스를 사용하거나 동일한 패키지에 포함시키는 것입니다.

희망이 있습니다.

+3

자바에서 클래스를 과도하게 사용하면 다른 언어보다 객체 지향적이라는 점에 동의하지 않는 것과 같은 방식으로 동의하지 않습니다. 특히'java.utils.Collections'는 C 라이브러리처럼 객체 지향적 인 기능을합니다. '친구'의 경우, 그들은 OO가 전하는 모든 것을 성취하는 데 도움을 줄 수 있습니다. 마음에 떠오르는 첫 번째 예는 참조 카운트 된 스마트 포인터와 약한 포인터입니다. 그것들은 관련 클래스이며 동일한 내부 * 참조 카운트 타입 (및 생성시 포인터)에 액세스해야합니다. –

+1

'friend'를 사용하지 않으면 내부 유형에 대한 액세스 권한을 열고 더 많은 코드를 가리켜 야합니다. 관심이 있다면'shared_ptr'와'weak_ptr'이 어떻게 구현되는지, 왜 그들이 서로의 세부 사항에 접근 할 필요가 있는지, 그리고 'friend'를 사용하지 않으면 더 큰 코드베이스에 액세스 할 수있는 방법에 대해 토론 할 수 있습니다. –

관련 문제