> Java > java지도 시간 > Java Mimic C의 '친구' 개념을 모방할 수 있습니까?

Java Mimic C의 '친구' 개념을 모방할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-11-08 08:42:01
원래의
381명이 탐색했습니다.

Can Java Mimic C  's

Java가 C의 'friend' 개념을 에뮬레이션할 수 있나요?

C에서 'friend' 개념을 사용하면 다른 패키지의 클래스에 액세스할 수 있습니다. 다른 클래스의 개인 및 보호 메서드. Java에서는 이 기능과 직접적으로 동등한 기능이 없습니다. 그러나 영리한 해결 방법을 사용하면 '친구' 개념을 시뮬레이션할 수 있습니다.

Java에서 '친구'를 시뮬레이션하는 방법

이 해결 방법의 핵심은 클래스 수준 비밀 식별자. 서로 다른 패키지에 두 개의 클래스(Romeo와 Juliet)가 있다고 가정해 보겠습니다. Romeo는 자신의 클래스를 확장하지 않고 Juliet의 비공개 메서드에 액세스하려고 합니다.

Romeo 패키지:

public class Romeo {
    public static final class LoveIdentifier {
        private LoveIdentifier() {}
    }
    private static final LoveIdentifier loveIdentifier = new LoveIdentifier();
    
    public void cuddleJuliet(Juliet.LoveIdentifier loveIdentifier) {
        // ...
    }
}
로그인 후 복사

Romeo는 비공개 생성자를 사용하여 중첩된 정적 클래스 LoveIdentifier를 정의합니다. 이 클래스는 Romeo가 Juliet의 비공개 메서드에 액세스할 수 있도록 하는 비밀 식별자 역할을 합니다.

Juliet 패키지:

public class Juliet {
    public static final class LoveIdentifier {
        private LoveIdentifier() {}
    }
    private static final LoveIdentifier loveIdentifier = new LoveIdentifier();
    
    public void beCuddled(Romeo.LoveIdentifier loveIdentifier) {
        // Allow Romeo to access private methods using the identifier
    }
}
로그인 후 복사

Juliet은 Romeo의 패키지와 일치하는 동일한 LoveIdentifier 클래스도 정의합니다. Juliet의 beCuddled 메소드가 호출되면 전달된 LoveIdentifier가 자신의 것과 일치하는지 확인합니다. 그렇다면 Romeo에게 비공개 메서드에 대한 액세스 권한을 부여합니다.

'친구' 시뮬레이션 사용

이제 Romeo는 다음과 같이 공유된 LoveIdentifier를 제공하여 Juliet과 상호 작용할 수 있습니다. 인수:

Romeo romeo = new Romeo();
Juliet juliet = new Juliet();
romeo.cuddleJuliet(juliet.loveIdentifier);
로그인 후 복사

Romeo가 올바른 LoveIdentifier를 전달하므로 그는 액세스할 수 있습니다. C'친구' 관계를 효과적으로 시뮬레이션하는 줄리엣의 사적인 방법.

위 내용은 Java Mimic C의 '친구' 개념을 모방할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿