private 같은 클래스 내에서만 접근이 가능하다.
(default) 같은 패키지 내에서만 접근이 가능하다
protected 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근이 가능하다.
public 접근 제한이 전혀 없다
| 제어자 | 같은 클래스 | 같은 패키지 | 자손 클래스 | 전체 |
|---|---|---|---|---|
| public | O | O | O | O |
| protected | O | O | O | |
| (default) | O | O | ||
| private | O |
package pkg1
public class MyParent {
private prv; // 같은 클래스
//생략됨 (default) int dft; // 같은 패키지
protected int prt; // 같은 패키지 + 자손(다른 패키지)
public int pub; // 접근 제한 없음
public void printMembers() {
System.out.println(prv); //ok
System.out.println(dft); //ok
System.out.println(prt); //ok
System.out.println(prv); //ok
}
}
class MyParentTest { // 접근 제어자가 (default)
public static void main(String[] args) {
MyParent p = new MyParent();
System.out.println(p.prv); //에러
System.out.println(p.dft); //ok
System.out.println(p.prt); //ok
System.out.println(p.prv); //ok
}
}
package pkg2
import pkg1.MyParent;
class MyChild extends MyParent {
public void printMembers() {
System.out.println(prv); //에러 같은 클래스가 아님
System.out.println(dft); //에러 같은 패키지가 아님
System.out.println(prt); //ok 자손이라 가능
System.out.println(prv); //ok
}
}
public class MyParentTest2 {
public static void main(String[] args) {
System.out.println(p.prv); //에러
System.out.println(p.dft); //에러
System.out.println(p.prt); //에러
System.out.println(p.prv); //ok 접근 제한 x 가능
}
좋은 글 감사합니다!