Java Access Modifier (액세스 컨트롤러)
Java는 수정자를 통한 클래스, 속성 및 메소드의 액세스 권한 및 기타 기능을 일반적으로 문의 프론트 엔드에 제어합니다. 예를 들어:
공개 클래스 클래스 이름 {// 클래스의 바디} 개인 부울 마이 플래그; 정적 최종 이중 주 = 9.5; 보호 된 정적 최종 int boxwidth = 42; public s tatic void main (String [] arguments) {// body of method}Java에는 액세스 수정 자 및 비 액세스 수정 자로 나뉘어져있는 많은 수정자가 있습니다. 이 섹션에서는 액세스 수정 자만 소개하며 비 액세스 수정자는 나중에 도입됩니다.
액세스 제어 문자라고도하는 액세스 수정자는 클래스, 멤버 변수 및 메소드의 사용 권한을 제어 할 수있는 키워드를 참조하십시오.
액세스 컨트롤러는 객체 지향 프로그래밍에서 중요한 개념이며 클래스, 변수, 방법 및 생성자에 대한 액세스를 보호하는 데 사용할 수 있습니다.
Java는 4 가지 다른 액세스 권한을 지원합니다.
공개 : 대중
대중으로 선언 된 클래스, 방법, 생성자 및 인터페이스는 다른 클래스에서 액세스 할 수 있습니다.
서로 액세스하는 여러 공개 클래스가 사용되지 않은 패키지로 배포되면 해당 공개 클래스가있는 패키지를 가져와야합니다. 클래스의 상속으로 인해 클래스의 모든 공개 방법과 변수는 서브 클래스에 의해 상속 될 수 있습니다.
다음 방법은 공개 액세스 제어를 사용합니다.
public static void main (String [] arguments) {// methys} Java 프로그램의 메인 () 메소드는 공개적으로 설정해야합니다. 그렇지 않으면 Java 통역사가 클래스를 실행할 수 없습니다.
보호 : 보호
보호 된 것으로 선언 된 변수, 방법 및 생성자는 동일한 패키지의 다른 클래스 또는 다른 패키지의 서브 클래스로 액세스 할 수 있습니다.
보호 된 액세스 수정자는 클래스 및 인터페이스를 수정할 수 없으며 회원 변수는 보호 된 것으로 선언 할 수 있지만 인터페이스의 멤버 변수 및 멤버 메소드는 보호 된 것으로 선언 할 수 없습니다.
서브 클래스는 보호 된 수정자가 선언 한 메소드 및 변수에 액세스하여 관련없는 클래스가 이러한 방법과 변수를 사용하지 못하게 할 수 있습니다.
다음 부모 클래스는 보호 된 액세스 수정자를 사용하고 서브 클래스는 부모 클래스의 껍질 () 메소드를 과부하합니다.
Public Class Dog {Protected Void Bark () {System.out.println ( "와우, 오지 마라")} 클래스 테디는 개를 확장합니다. , 나는 아주 무서워, 나를 따라 오지 마라 ");}} 껍질 () 메소드가 비공개로 선언되면 개 이외의 클래스는 메소드에 액세스 할 수 없습니다. Bark ()가 공개적으로 선언되면 모든 클래스가 메소드에 액세스 할 수 있습니다. 이 방법이 클래스의 서브 클래스에만 표시되기를 원한다면 방법을 보호 된 것으로 선언하십시오.
개인 : 개인
개인 액세스 수정자는 가장 엄격한 액세스 수준이므로 개인으로 선언 된 메소드, 변수 및 생성자는 자신이 속한 클래스에 의해서만 액세스 할 수 있으며 클래스와 인터페이스는 개인으로 선언 할 수 없습니다.
개인 액세스 유형으로 선언 된 변수는 클래스의 공개 getter/setter 방법을 통해 외부 클래스에서만 액세스 할 수 있습니다.
개인 액세스 수정자를 사용하는 것은 주로 클래스의 구현 세부 사항을 숨기고 클래스의 데이터를 보호하는 데 사용됩니다.
다음 클래스는 개인 액세스 수정자를 사용합니다.
공개 개 {개인 문자열 이름; (int age) {this.age = age}}예에서는 개 클래스의 이름과 연령 변수는 개인 변수이므로 다른 클래스는 변수의 값을 직접 얻고 설정할 수 없습니다. 다른 클래스가 변수를 조작 할 수 있도록하기 위해 두 쌍의 공개 메소드, getName ()/setName () 및 getage ()/setage ()가 정의되며 개인 변수의 값을 얻고 설정하는 데 사용됩니다.
이것은 Java의 키워드입니다.
클래스에서 개인 변수에 액세스하는 방법을 정의하면 변수 이름의 Prefix "get"또는 "set"과 같이 이름을 지정하고 변수의 초기 문자를 대문자로 지정합니다. 예를 들어, 개인 변수 이름을 얻는 메소드는 getName ()이며 이름을 설정하는 메소드는 setName ()입니다. 이 방법은 종종 사용되며 Getter 및 Setter 메소드라고하는 특정 이름을 갖습니다.
기본값 : 키워드가 사용되지 않습니다
동일한 패키지 내의 클래스에는 수정 자 선언 속성 및 메소드가 표시되지 않습니다. 인터페이스의 모든 변수는 암시 적으로 공개 정적 최종으로 선언되며 인터페이스의 메소드는 기본적으로 공개됩니다.
다음 예에서 볼 수 있듯이 클래스, 변수 및 메소드의 정의는 수정자를 사용하지 않습니다.
클래스 개 {문자열 이름; 마스터, 배고프다 ");}}액세스 제어 및 상속
상속에 대한 다음 규칙에 유의하십시오 (상속 개념을 이해하지 못하는 독자는 여기에서 건너 뛰거나 Java 상속 및 다형성 미리보기를 클릭 할 수 있습니다) :
학부모 수업에서 공개로 선언 된 방법은 아동 수업에서 공개되어야합니다.
부모 클래스에서 보호 된 것으로 선언 된 방법은 아동 계급에서 보호 된 것으로 선언됩니다. 개인으로 선언 할 수 없습니다.
부모 클래스에서 기본 수정 자로 선언 된 메소드는 서브 클래스로 비공개로 선언 할 수 있습니다.
부모 클래스에서 비공개로 선언 된 방법은 상속받을 수 없습니다.
액세스 제어 문자를 사용하는 방법
액세스 제어 문자는 코드의 권한을 쉽게 제어 할 수 있습니다.
다른 모든 클래스에 대한 액세스를 작성 해야하는 경우 클래스의 액세스 제어를 공개로 선언 할 수 있습니다.
자신의 패키지의 클래스에서만 수업에 액세스 할 수 있도록 해야하는 경우 액세스 제어 문자를 생략 할 수 있습니다.
클래스에서 멤버 데이터를 제어 해야하는 경우이 클래스의 멤버 데이터 액세스 제어 문자는 공개, 보호 또는 생략으로 설정할 수 있습니다.
Java 변수의 범위 <br /> Java에서 변수의 범위는 클래스 레벨, 객체 인스턴스 레벨, 메소드 레벨 및 블록 레벨의 네 가지 레벨로 나뉩니다.
클래스 수준 변수를 글로벌 변수 또는 정적 키워드로 수정해야합니다. 클래스 수준 변수는 클래스 정의 후에 이미 존재하며 메모리 공간을 점유하고 클래스 이름을 통해 액세스 할 수 있으며 인스턴스화 할 필요가 없습니다.
객체 인스턴스 수준 변수는 인스턴스화 후에 만 회원 변수입니다.
메소드 수준 변수는 로컬 변수 인 메소드 내에 정의 된 변수입니다.
블록 수준 변수는 블록 내에서 정의 된 변수입니다. 블록은 예를 들어 브레이스로 둘러싸인 코드를 참조하십시오.
{int age = 3; "www.weixueyuan.net"; 오류, 연령 및 이름 변수 System.out.println (이름 + "이미" + age + "old old"); 설명 :
메소드 수준 변수에 액세스하는 것 외에도 메소드는 클래스 수준 및 인스턴스 수준 변수에도 액세스 할 수 있습니다.
클래스 수준 및 인스턴스 수준 변수는 블록 내부에 액세스 할 수 있습니다.
방법 및 블록 레벨 변수는 초기화되어야합니다. 그렇지 않으면 액세스 할 수 없습니다.
데모 코드 :
공개 클래스 데모 {public static string name = "weixueyuan"; // 객체 인스턴스 수준 변수 // run {int j = 2; test1 () {int j = 3; System.out.println ( "name =" + name + ", i =" + i + ", j =" + j);} public static void main (string [] args) {// Create No Create 만 액세스 할 수 있습니다. 객체, 클래스 수준 변수 system.out.println (demo.name)에 액세스하십시오. // 객체 생성 및 액세스 메소드 demo t = new demo (); t.test1 ();}} 실행 결과 :
마이크로 아카데미 이름 = 마이크로 아카데미, i = 0, j = 3