Java 로드 상세 정보 (5) 액세스 권한 제어
액세스 권한의 제어 등급은 최대부터 최소까지:public,protected, 패키지 액세스 권한(키워드 없음)과private 순이다.
public,protected,private 이 몇 개의 자바 접근 권한 수식어는 사용할 때 클래스의 모든 구성원(필드 또는 방법)이 정의되기 전이다.
1. 클래스 구성원의 접근 권한
구성원에 대한 액세스 권한을 얻을 수 있는 유일한 방법은 다음과 같습니다.
1).이 구성원을 퍼블릭으로 만들다.누가 어디에 있든지 간에 이 구성원을 방문할 수 있다.
2).액세스 권한이 없는 수식어를 사용하여 다른 클래스를 같은 패키지에 배치하는 방식으로 구성원에게 패키지 액세스 권한을 부여하고 패키지 내의 다른 클래스는 이 구성원에 접근할 수 있다.
3).계승된 클래스는public 구성원이나protected 구성원에 접근할 수 있습니다.
4).수치를 읽고 바꾸기 위해 접근기와 변이기 방법을 제공합니다.
1. 패키지 액세스 권한
기본 접근 권한은 키워드가 없지만 패키지 접근 권한을 가리킨다. 이것은 현재 보고서의 모든 다른 클래스가 그 구성원에 대한 접근 권한이 있음을 나타낸다. 그러나 이 패키지 이외의 모든 클래스에 대해 이 구성원은private이다.
패키지 액세스 권한은 패키지 내의 모든 관련 클래스를 조합하여 서로 쉽게 상호작용할 수 있도록 합니다.
참고: 두 클래스가 같은 디렉터리에 있고 자신에게 패키지 이름을 설정하지 않으면 자바는 이러한 파일을 자동으로 이 디렉터리의 기본 패키지에 속하는 것으로 간주하여 서로 패키지 접근 권한을 가진다.
다음 예에서는 이 문제를 설명합니다.
// Cake Pie ,
class Pie{
void f(){
System.out.println("Pie.f()");
}
}
class Cake{
public static void main(String[] args){
Pie x = new Pie();
x.f();
}
}
// Pie.f()
2.public: 인터페이스 액세스 권한키워드public를 사용하는 것은 그 후의 구성원들이 모든 사람에게 사용할 수 있다는 것을 의미하며, 특히 라이브러리를 사용하는 고객 프로그래머도 마찬가지이다.
3.private: 접근할 수 없습니다.
키워드private는 이 구성원을 포함하는 클래스를 제외하고 다른 어떤 클래스도 이 구성원에 접근할 수 없음을 나타냅니다.같은 가방 안의 다른 클래스는 이 클래스의private 구성원에 접근할 수 없기 때문에 이것은 자신을 격리한 셈이다.
private 키워드의 이러한 작용은 여러 가지 용도가 있다. 예를 들어 대상을 어떻게 만드는지 제어하고 다른 사람이 특정한 구조기(또는 모든 구조기)에 직접 접근하지 못하게 하는 것이다.보다
다음 예:
class Sundae{
private Sundae(){}
static Sundae makeASundae(){
return new Sundae();
}
}
public class IceCream {
public static void main(String[] args){
Sundae x = Sundae.makeASundae();
}
}
이 예에서, 우리는makeASundae () 방법을 호출하여 Sundae 대상을 만들 수 있지만, 구조기를 통해 만들 수 없습니다.클래스의privat e역에도 적용됩니다.
그러나 주의해야 할 것은 클래스에서 어떤 대상의 인용이private라고 해서 다른 대상이 이 대상의public 인용을 가질 수 없다고 생각해서는 안 된다는 것이다.
4.protected: 액세스 권한 상속
새 패키지를 만들고 다른 패키지 계승 클래스에서 접근할 수 있는 유일한 구성원은 원본 패키지의public 구성원입니다.
때때로 기본 클래스의 창설자는 특정한 구성원의 접근 권한을 모든 클래스가 아닌 파생 클래스에 부여하기를 원하기 때문에 키워드protected를 사용해야 한다.
주의,protected도 패키지 접근 권한을 제공합니다. 즉, 같은 패키지 내의 다른 클래스도 이런protected 요소에 접근할 수 있습니다.
2. 인터페이스와 실현
접근 권한의 제어는 일반적으로 구체적으로 실현된 숨겨진 것으로 불린다.
데이터와 방법을 분류에 포장하고 구체적으로 실현된 숨겨짐은 흔히 봉인이라고 불린다.
액세스 권한 제어는 두 가지 중요한 이유로 데이터 유형 내부에 권한의 경계를 그립니다.
1. 클라이언트 프로그래머가 사용할 수 있는 것과 사용할 수 없는 경계를 설정해야 한다.구조에서 자신의 내부 메커니즘을 구축할 수 있기 때문에 클라이언트 프로그래머가 우연히 내부 메커니즘을 그들이 사용하는 인터페이스의 일부분으로 간주할까 봐 걱정할 필요가 없다.
2. 인터페이스와 구체적인 실현을 분리한다.
3. 클래스 액세스 권한
Java에서 액세스 권한 수식어는 라이브러리의 어떤 종류가 이 라이브러리 사용자에게 사용할 수 있는지 확인하는 데도 사용할 수 있다.
수식어는 키워드class 앞에 두어야 합니다.예:
public class Widget{......}
또는
improt access.Widget;
클래스는private일 수 없음을 알아야 합니다. (클래스가private일 경우 이 클래스를 제외하고 다른 어떤 클래스도 접근할 수 없습니다.) 보호할 수도 없고, 보호할 수도 없습니다. (사실은 내부 클래스는private나protected일 수 있지만, 이것은 특례입니다. 후속 글에서 서술한 바와 같이) 패키지 접근 권한이나public일 수 있습니다.다른 사람이 이 클래스에 접근하기를 원하지 않는다면, 이 클래스의 모든 구조기를private로 지정하여 모든 사람이 이 클래스의 대상을 만드는 것을 막을 수 있습니다.그러나 이것도 예외가 있다. 이런 방법은 당신이 이 클래스의static 구성원 내부에서 이 클래스를 만드는 것을 막을 수 없다.다음 예를 살펴보겠습니다.
class Soup1{
private Soup1(){}
public static Soup1 makeSoup(){ //
return new Soup1();
}
}
class Soup2{
private Soup2(){}
private static Soup2 ps1 = new Soup2(); //
public static Soup2 access(){
return ps1;
}
public void f(){}
}
public class Lunch {
void testPrivate(){
//Soup1 soup = new Soup1;
}
void testSingleton(){
Soup2.access().f();
}
}
Soup1과 Soup2 클래스의 구조기는 모두private이며, 누구도 직접 구조기를 사용하여 이 클래스의 대상을 만들 수 없다는 것을 알 수 있다.그러나 우리는 이 두 가지 종류를 사용할 수 있다. Soup1에static 방법을 만들고 이 방법에서 구조 함수를 사용하여 Soup1 대상을 만들고 인용을 되돌려준다.Soup2의 생성은 디자인 모드의 단례 모드를 사용하고 하나의 대상만 만들 수 있습니다.Soup2 클래스의 대상은 Soup2의 static private 구성원으로 만들어졌기 때문에 있고 하나밖에 없습니다. 그리고 퍼블릭 방법access () 를 통과하지 않으면 접근할 수 없습니다.그 밖에 일부 제한도 주의해야 한다.
1. 모든 컴파일러는public 클래스가 하나밖에 없습니다.
2.public 클래스의 이름은 대소문자를 포함하여 컴파일 단원에 포함된 파일 이름과 완전히 일치해야 합니다.
3. 컴파일러에public가 있는 클래스가 없으면 파일에 임의로 이름을 붙일 수 있습니다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.