>백엔드 개발 >C++ >Java에서 C의 Friend 개념을 어떻게 시뮬레이션할 수 있습니까?

Java에서 C의 Friend 개념을 어떻게 시뮬레이션할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-08 00:19:111011검색

How Can We Simulate C  's Friend Concept in Java?

트릭을 사용하여 Java에서 C 'Friend' 개념 시뮬레이션

C에서 'friend' 개념을 사용하면 서로 다른 패키지의 클래스가 서로의 비공개 멤버에 액세스합니다. Java에서는 이 개념과 직접적으로 동등한 것이 없습니다. 그러나 '친구' 관계를 시뮬레이션하기 위해 영리한 트릭을 사용할 수 있습니다.

다음 시나리오를 고려하십시오. 'montague' 패키지의 'Romeo' 클래스는 패키지에 있는 'Juliet' 클래스의 비공개 메소드에 액세스해야 합니다. '로미오'를 '줄리엣'의 서브클래스로 만들지 않고 '캐퓰릿'을 만들었습니다.

해결 방법:

  • 'Juliet'은 'Romeo.Love' 유형의 인수를 사용하는 정적 메서드 'cuddle'을 선언합니다.
  • 'Romeo'는 내부 클래스 '를 생성합니다. Love'는 개인 생성자와 'love'라는 정적 최종 인스턴스를 포함합니다.
  • 'Romeo'는 정적 메소드를 제공합니다. 'love' 인스턴스를 인수로 사용하여 'Juliet.cuddle'을 호출하는 'cuddleJuliet'.

작동 방식:

  • ' Romeo.Love' 클래스는 공개이지만 생성자는 비공개입니다. 이렇게 하면 오직 Romeo만이 'Love' 인스턴스를 생성할 수 있습니다.
  • 'Juliet.cuddle' 메소드는 공개이지만 인수로 'Romeo.Love' 인스턴스가 필요합니다.
  • By 'love' 인스턴스로 'Juliet.cuddle'을 호출하면 'Romeo'는 비공개 메서드에 액세스할 수 있습니다. 'Juliet'.

기본적으로 'Romeo.Love'는 다른 클래스가 'Juliet'의 비공개 멤버에 액세스하는 것을 방지하는 "보안 서명" 역할을 합니다. 이 트릭은 'Romeo'가 'Juliet'의 비공개 기능을 서로의 하위 클래스로 만들지 않고도 액세스할 수 있도록 허용하여 Java의 '친구' 개념을 시뮬레이션합니다.

위 내용은 Java에서 C의 Friend 개념을 어떻게 시뮬레이션할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.