예시를 통해 확인이 가능하다.
다음과 같이 패키지 파일 2가지를 만들고 Myparent 클래스와 이를 상속할 MyparentTest2 클래스를 각 패키지에 생성하여 각 상관 관계를 확인할 수 있다.
package Pkg1;
public class Myparent {
private int prv; //같은 클래스
int dft; // 같은 패키지
protected int prt; // 같은패키지 + 자손(다른 패키지)
public int pub; //접근제한 없음
public void printMembers() {
System.out.println(prv);
System.out.println(dft);
System.out.println(prt);
System.out.println(pub);
}
}
class MyparentTest {
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.pub); //OK
}
}
private 제어자가 붙은경우 같은 클래스 내부에(Myparent)에서만 사용이 가능하다.
그 외 나머지 제어자들은 같은 패키지내의 범위는 허용하기 때문에 class MyparentTest에서 사용이 가능하다.
그렇다면 범위에 같은패키지 + 다른 패키지의 자손 클래스를 지원하는 protected 제어자와 제한이 없는 public의 경우는 다음과 같이 확인할 수 있다.
package pkg2;
import Pkg1.Myparent;
class MyChild extends Myparent {
public void printMembers() {
// System.out.println(prv); //에러
// System.out.println(dft); //에러
System.out.println(prt);
System.out.println(pub);
}
}
public class MyparentTest2 {
public static void main(String[] args) {
Myparent p = new Myparent();
// System.out.println(p.prv); //에러
// System.out.println(p.dft); //에러
// System.out.println(p.prt); //에러
System.out.println(p.pub); //OK public은 접근제한이 없음.
}
}
Impot 로 Pkg1패키지의 .Myparent 클래스를 불러왔다.
이를 상속받은 MyChild class에서 prt변수는 사용할 수 있으나 자손 클래스가 아닌 다른 클래스에서는 사용이 불가능하다.
public 제어자의 경우 어디서나 이용이 가능하다.