-
JAVA OBJECT CLASSS 와 객체 및 캡슐화자바 JAVA 2020. 7. 28. 07:23
8.8 가시성 수식어
가시성 수정자는 클래스와 클래스의 구성원의 가시성을 지정하는 데 사용할 수 있다.
클래스, 메서드 및 데이터 필드에 대해 공용 가시성 한정자를 사용하여 다음을 나타낼 수 있다.
그들은 다른 어떤 수업에서도 접근할 수 있다. 사용 중인 가시성 한정자가 없는 경우, 기본적으로클래스, 메서드 및 데이터 필드는 동일한 패키지의 모든 클래스에서 액세스할 수 있다. 이것은
package-private 또는 package-access로 알려진.
package-private(또는 packageaccess)
318 제8장 오브젝트 및 클래스
클래스가 공개 클래스로 정의되지 않은 경우 동일한 패키지 내에서만 액세스할 수 있다. 로서
그림 8.15와 같이 C1은 C2에서 접근할 수 있지만 C3에서는 접근할 수 없다.
참고
패키지는 클래스를 구성하는 데 사용될 수 있다. 이렇게 하려면 다음 줄을 추가하십시오.
프로그램의 첫 번째 비댓글 및 비문 문장으로서:
packageName 패키지;
패키지 문 없이 클래스를 정의한 경우, 클래스는 기본값으로 배치된다고 한다.
꾸러미
Java는 기본 패키지를 사용하는 대신 패키지에 클래스를 넣을 것을 Java에서 권장한다. 을 위해
그러나 이 책은 기본 패키지를 사용한다. 패키지에 대한 자세한 내용은
부록 III.G, 패키지를 참조하십시오.
Java는 공용 및 기본 가시성 수식어 외에도 개인 및 개인 정보를 제공한다.
클래스 멤버에 대한 보호 수식어. 이 절에서는 사설 수식어를 소개한다. The
보호되는 수식어는 섹션 11.13 "보호된 데이터 및 방법"에서 소개될 것이다.
개인 한정자가 자체 내에서만 메서드와 데이터 필드에 액세스할 수 있도록 함
class. 그림 8.14는 class C1의 공개, 기본 및 개인 데이터 필드 또는 방법을 보여준다.
동일한 패키지의 클래스 C2와 다른 패키지의 클래스 C3에서 액세스할 수 있다.
패키지 사용
패키지 p1;
O.x에 액세스할 수 있음;
O.Y.에 접근할 수 있다.
o.z에 접근할 수 없음;
o.m1()을 호출할 수 있음;
o.m2()를 호출할 수 있음;
o.m3()을 호출할 수 없음;
}
C1 o = 새 C1();
그림 8.14 개인 수식어는 기본 수식어인 정의 클래스에 대한 액세스를 제한한다.
패키지에 대한 액세스를 제한하고 공용 수식어가 무제한 액세스를 허용한다.
패키지 p1;
클래스 C1 {
...
}
패키지 p1;
공용 클래스 C2 {
C1에 접근할 수 있다
}
패키지 p2;
공용 C3 {
C1에 액세스할 수 없음;
C2에 접근할 수 있다.
}
그림 8.15 비공용 클래스는 패키지 액세스가 가능하다.
가시성 한정자는 클래스의 데이터 필드 및 메서드에 액세스할 수 있는 방법을 지정하십시오.
교실 밖에서 내부로부터 데이터 필드 및 메서드에 접근하는 데 제한이 없다.
class. 그림 8.16b와 같이 c 클래스의 물체는 c 클래스의 개인 멤버에 접근할 수 없다
.
왜냐하면 c는 시험반이기 때문이다. 그림 8.16a에 나타난 바와 같이, C 등급의 물체는 C 등급의 물체에 접근할 수 있다.
c는 그 자신의 계급 안에서 정의되기 때문에, 개인 구성원들.
내부 접근
8.9 데이터 필드 캡슐화 319
주의
개인 수식어는 학급 구성원에게만 적용된다. 대중 수식어
반이나 반의 회원에게 지원할 수 있다. 공용 및 개인 한정자 사용
로컬 변수에 컴파일 오류를 발생시킬 수 있다.
참고
대부분의 경우 건설업자는 공공이어야 한다. 하지만, 만약 당신이 그것을 금지하고 싶다면.
사용자가 클래스의 인스턴스를 만들 때 개인 생성자를 사용하십시오. 예를 들면 있다.
모든 데이터 필드와 수학 클래스에서 인스턴스를 만들 이유가 없음
방법은 정적이다. 사용자가 Math 클래스에서 개체를 만드는 것을 방지하려면
java.properties의 생성자.수학은 다음과 같이 정의된다.
사설 수학() {
}
8.9 데이터 필드 캡슐화
데이터 필드를 비공개로 설정하면 데이터를 보호하고 클래스를 쉽게 유지할 수 있다.
CircleWithStaticMembers 클래스의 데이터 필드 반지름 및 numberOfObjects
목록 8.7은 직접 수정할 수 있다(예: c1. radius = 5 또는
CircleWithStaticMembers.numberOfObjects = 10). 이것은 좋은 관행이 아니다. 에게.
두 가지 이유:
■ 첫째, 데이터를 변조할 수 있다. 예를 들어, numberOfObjects는 다음 값을 세는 것이다.
생성된 개체 수, 그러나 임의의 값으로 잘못 설정될 수 있음(예:
CircleWithStaticMembers.numberOfObjects = 10).
■ 둘째, 수업은 유지관리가 어려워지고 버그에 취약해진다. 가정하다
CircleWithStaticMembers 클래스를 수정하여
다른 프로그램이 이미 클래스를 사용한 후 반경은 음성이 아니다. 그래야 한다.
CircleWithStaticMembers 클래스뿐만 아니라 프로그램도 변경
고객이 반경을 직접 수정했을 수 있기 때문에(예:
c1.168 = -5).
데이터 필드의 직접 수정을 방지하려면 선언하십시오.
'자바 JAVA' 카테고리의 다른 글
자바 문자열 비교 (0) 2020.07.28 자바 데이터필드 캡슐화의 장점 (0) 2020.07.28 자바 코딩 테스트 ( 슬롯 찾기, 쿠폰 수집기 문제) (0) 2020.07.26 자바 중간 시험 (코딩테스트 배열문제) (0) 2020.07.26 자바 배열 처리 ( 배열 목록 찾기) (0) 2020.07.26