오늘 우리는 Java의 Access Rights Control에 대해 배울 것입니다. 액세스 제어를 논의하기 전에 액세스 제어가 필요한 이유에 대해 논의 해 봅시다. 두 가지 시나리오를 고려하십시오.
시나리오 1 : 엔지니어 A는 클래스 클래스를 작성했지만 엔지니어 A는 응용 프로그램에 사용 된 다른 클래스에서 Classa에 액세스하기를 원하지 않으므로 어떻게 처리해야합니까?
시나리오 2 : 엔지니어 A가 FUN1과 FUN2의 두 가지 방법을 가진 Classa 클래스를 작성하면 엔지니어는 Fun1 만 외부 세계에 보이기를 원합니다. 즉, 다른 엔지니어가 Classa라고 부르면 Method Fun1 만 호출 할 수 있습니다. 그렇다면 우리는 어떻게해야합니까?
현재 액세스 권한 제어가 역할을 수행 할 수 있습니다.
Java에서는 기본 액세스 권한 (패킷 액세스 권한), 공개, 개인 및 보호의 4 가지 유형의 액세스 권한 제어가 제공됩니다.
기본 액세스 권한과 공개 만 사용하여 위의 4 가지 액세스 권한에 대한 클래스를 수정할 수 있습니다 . 수정 된 클래스의 네 가지 권한은 괜찮습니다. (이 장소에서 언급 된 수업은 내부 클래스가 아닌 외부 클래스를 대상으로합니다)
다음은 수정 클래스 및 수정 클래스의 구성원을위한이 4 가지 액세스 권한 제어를 설명합니다.
1. 수정 범주
기본 액세스 권한 (패키지 액세스 권한) : 클래스를 수정하는 데 사용되는 경우 클래스가 동일한 패키지의 다른 클래스에만 볼 수 있음을 의미합니다.
공개 : 클래스를 수정하는 데 사용되는 경우 클래스가 다른 모든 클래스에 보입니다.
두 가지 예에서 몇 가지 예제의 차이점을 살펴 보겠습니다.
Example 1:
main.java :
패키지 com.cxh.test1; 공개 클래스 메인 { / ** * @param args * / public static void main (string [] args) {// todo 자동 생성 메소드 스터브 People People = 새로운 사람 ( "Tom"); System.out.println (people.getName ()); }} 사람. 자바
패키지 com.cxh.test1; 클래스 사람 {// 기본 액세스 권한 (패키지 액세스 권한) 프라이버시 문자열 이름 = null; 공개인 (문자열 이름) {this.name = 이름; } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; }}코드에서 볼 수 있듯이 People 클래스 수정은 기본 액세스 권한을 사용하며 People 클래스 및 메인 클래스가 동일한 패키지에 있으므로 People 클래스는 메인 클래스에 보입니다.
프로그램 실행 결과 :
Example 2:
사람. 자바
패키지 com.cxh.test2; 클래스 사람 {// 기본 액세스 권한 (패키지 액세스 권한) 프라이버시 문자열 이름 = null; 공개인 (문자열 이름) {this.name = 이름; } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; }}현재 인민 수업과 메인 클래스는 같은 패키지에 있지 않습니다. 무슨 일이 일어날까요?
메인 클래스에서 제기 된 오류는 다음과 같습니다.
그것은 원활한 클래스가 메인 클래스에서 보이지 않는다는 것을 촉구합니다. 이것으로부터 우리는 클래스가 기본 액세스 권한으로 수정되면 클래스가 동일한 패키지의 다른 클래스에만 보이고 다른 패키지의 클래스에는 보이지 않음을 알 수 있습니다.
위 그림의 빠른 수정 프롬프트에 표시된대로, People 클래스의 기본 액세스 권한을 공개로 변경하면 People 클래스가 메인 클래스로 보입니다.
2. 클래스 수정 방법 및 변수
기본 액세스 권한 (패키지 액세스 권한) : 클래스의 메소드 또는 변수가 패키지 액세스 권한으로 수정되면 클래스의 메소드 또는 변수를 동일한 패키지의 다른 클래스로만 표시 할 수 있으며 클래스의 메소드 또는 변수를 다른 패키지의 클래스로 표시 할 수 없습니다.
개인 : 클래스의 방법이나 변수가 비공개로 수정 된 경우 클래스의 방법이나 변수는 클래스 자체에서만 액세스 할 수 있으며 클래스 또는 다른 클래스에 표시 할 수 없습니다.
보호 : 클래스의 메소드 또는 변수가 보호에 의해 수정되면이 클래스의 메소드 또는 변수에 동일한 패키지 클래스에 대해 액세스 할 수 있습니다. 패키지가 다른 클래스의 경우 해당 클래스에서 상속 된 클래스 만 해당 클래스의 메소드 또는 변수에 액세스 할 수 있습니다.
공개 : 대중이 수정 한 방법 또는 변수는 어디에서나 볼 수 있습니다.
스코프 클래스 방법과 변수의 차이점을 보려면 몇 가지 예를 들어 봅시다.
Example 3:
Main.java는 변경되지 않았습니다
사람. 자바
패키지 com.cxh.test1; 공개 클래스 사람들 {private String name = null; 공개인 (문자열 이름) {this.name = 이름; } string getName () {// 기본 액세스 권한 (패키지 액세스 권한) 리턴 이름; } void setName (문자열 이름) {// 기본 액세스 권한 (패키지 액세스 권한) this.name = 이름; }}현재 호출 메소드 GetName 및 SetName은 메인 클래스에 표시 될 수 있습니다.
그러나 People Class와 Main Class가 같은 패키지에 있지 않은 경우 :
패키지 com.cxh.test2; // 메인 클래스와 다른 패키지 공개 클래스 사람들 {private String name = null; 공개인 (문자열 이름) {this.name = 이름; } string getName () {// 기본 액세스 권한 (패키지 액세스 권한) 리턴 이름; } void setName (문자열 이름) {// 기본 액세스 권한 (패키지 액세스 권한) this.name = 이름; }}현재 메인 클래스에서 오류가 표시됩니다.
이를 통해 기본 액세스 권한이 클래스의 메소드 또는 변수를 수정하는 데 사용되는 경우 동일한 패키지의 다른 클래스에서만 액세스 할 수 있음을 알 수 있습니다.
Example 4:
사람. 자바
패키지 com.cxh.test1; 공개 클래스 사람들 {private String name = null; 공개인 (문자열 이름) {this.name = 이름; } protected String getName () {return name; } protected void setName (문자열 이름) {this.name = 이름; }}이 시점에서는 Main에서 호출 메소드 GetName 및 SetName을 표시 할 수 있습니다.
People Class와 Main Class가 다른 패키지에있는 경우 :
패키지 com.cxh.test2; 공개 클래스 사람들 {private String name = null; 공개인 (문자열 이름) {this.name = 이름; } protected String getName () {return name; } protected void setName (문자열 이름) {this.name = 이름; }}오류가 주로보고됩니다.
클래스 맨이 Com.cxh.test1에 지정되어 사람들을 상속 받으면 클래스 맨에 호출 메소드 GetName 및 SetName을 표시 할 수 있습니다.
패키지 com.cxh.test1; com.cxh.test2.people import; 공개 계급 남자는 사람들을 확장합니다 {public man (string name) {super (name); } public String toString () {return getName (); }}Java 패키지 및 클래스 파일에 대한 몇 가지 지식은 다음과 같습니다.
1) Java의 패키지는 주로 클래스 파일 명명 충돌을 방지하고 코드 조직 및 관리를 용이하게하는 데 사용됩니다.
2) Java 소스 코드 파일의 경우 공개 클래스가있는 경우 공개 클래스 만있을 수 있으며 소스 코드 파일의 이름은 공개 클래스의 이름과 정확히 동일해야합니다. 또한 다른 클래스가있는 경우 이러한 클래스는 패키지 외부에서 보이지 않습니다. 소스 코드 파일에 공개 클래스가없는 경우 소스 코드 파일의 이름을 기쁘게 할 수 있습니다.
위의 내용은이 기사에 관한 모든 것입니다. 모든 사람의 학습에 도움이되기를 바랍니다.