ch7-21 접근제어자
접근 제어자는 private, (default), protected, public 중 1개만 사용 가능하다. private는 같은 클래스, (default)는 같은 패키지 내에서만 접근 가능하다. protected는 같은 패키지 + 다른 패키지의 자손 클래스에서 접근 가능하고, public은 접근 제한이 없다.
class에는 public, (default) 만 붙일 수 있다.
멤버에는 private, (default), protected, public 4가지 다 가능하다.
실습
package 이름은 pkg1, class 이름은 MyParentTest로 생성한다.
MyParent 클래스를 만들어, 접근 범위를 Test 한다.
p.prv는 오류난다. private는 같은 클래스만 접근할 수 있다.
pkg2에 MyParentTest2를 생성하고, MyParent를 상속받는 MyChild 클래스를 생성하면 전부 오류가난다. MyParentTest에서 생성한 MyParent는 default로 같은 패키지 내에서만 사용 가능하다.
이를 고치기 위해 MyParent의 제어자를 public으로 바꾸면 오류난다. 하나의 소스 파일에는 public 클래스는 1개 있어야 한다.
다른 패키지의 클래스를 사용하려면 import문을 사용하던가, 아니면 패키지 명을 붙인다.
private는 같은 클래스에서만 사용할 수 있어 오류가 발생하고, default는 같은 패키지에서만 사용할 수 있어 오류가 발생한다. protected는 같은 패키지 + 다른 패키지의 자손 까지 가능하므로 pkg2의 MyChild에서 사용할 수 있다.
MyParent를 main 메서드에서 사용할 경우 public만 사용 할 수 있다. protected는 다른 패키지의 자손만 사용할 수 있고, 다른 패키지의 다른 클래스에서 사용할 수 없다. -> protected의 다른 패키지의 사용 범위는 상속받은 자손이어야 한다는 말이다.
사용할 수 있는 부분만 남기면 오류가 사라진다.
빨간색은 private 범위이다. private는 클래스 내에서만 사용할 수 있다. 파란색은 (default) 범위이다. 같은 패키지 내에서만 사용 가능해서 pkg2에는 접근 불가능하다. 노란색은 protected로 같은 패키지 + 다른 패키지의 자손 까지 사용할 수 있다.
'자바 > 자바의 정석 Ch.7 객체지향 프로그래밍 II' 카테고리의 다른 글
ch7-23 다형성 (0) | 2023.04.19 |
---|---|
ch7-22 캡슐화 (0) | 2023.04.18 |
ch7-17~20 제어자, static, final, abstract (0) | 2023.04.17 |
ch7-15, 16 import문, static import문 (0) | 2023.04.16 |
ch7-12~14 패키지, 클래스 패스 (1) | 2023.04.16 |