접근 제한 지정
2009. 8. 21. 00:45
접근제한 테스트용 예제
- public 접근에 제한이 없음.
- protected 패키지 이름이 동일하거나 상속 관계에 있을 경우 접근 가능.
- default 패키지 이름이 동일할 경우에만 접근 가능.
- private 선언한 클래스 내에서만 접근 가능.
Base 클래스 선언
package net.jeongsam.exam1; public Base { public int a; private int b; protected int c; int d; // default Base() { a = 1; b = 2; c = 3; d = 4; } void print() { System.out.println(a); // public - 접근 제한 없음. System.out.println(b); // private - Base 클래스 내에서 접근 가능. System.out.println(c); // protected - Base 클래스 내에서 접근 가능. System.out.println(d); // default - Base 클래스 내에서 접근 가능. } public static void main(String[] args) { new Base().print(); } }
컴파일>javac -d . Base.java
현재 디렉터리를 기준으로 패키지 디렉터리 구성
실행>java -classpath . net.jeongsam.exam1.Base
현재 디렉터리를 기준으로 패키지 지정
동일 패키지에서 선언된 클래스
package net.jeongsam.exam1; public Other1 { void print() { Base base = new Base(); System.out.println(base.a); // 출력 - 접근 제한 없음. System.out.println(base.b); // 오류 - Base 클래스 내에서만 접근 가능. System.out.println(base.c); // 출력 - 동일 패키지 접근 가능. System.out.println(base.d); // 출력 - 동일 패키지 접근 가능. } public static void main(String[] args) { new Other1().print(); } }
컴파일>javac -d . Other1.java
현재 디렉터리를 기준으로 패키지 디렉터리 구성
실행>java -classpath . net.jeongsam.exam1.Other1
현재 디렉터리를 기준으로 패키지 지정
동일 패키지에서 상속 관계 클래스
package net.jeongsam.exam1; public Other2 extends Base { void print() { System.out.println(a); // 출력 - 접근 제한 없음. System.out.println(b); // 오류 - Base 클래스 내에서만 접근 가능. System.out.println(c); // 출력 - 동일 패키지 접근 가능. 상속 관계 접근 가능. System.out.println(d); // 출력 - 동일 패키지 접근 가능. } public static void main(String[] args) { new Other2().print(); } }
컴파일>javac -d . Other2.java
현재 디렉터리를 기준으로 패키지 디렉터리 구성
실행>java -classpath . net.jeongsam.exam1.Other2
현재 디렉터리를 기준으로 패키지 지정
다른 패키지에서 선언된 클래스
package net.jeongsam.exam2; import net.jeongsam.exam1.Base; public Other3 { void print() { Base base = new Base(); System.out.println(base.a); // 출력 - 접근 제한 없음. System.out.println(base.b); // 오류 - Base 클래스 내에서만 접근 가능. System.out.println(base.c); // 오류 - 동일 패키지만 접근 가능. System.out.println(base.d); // 오류 - 동일 패키지만 접근 가능. } public static void main(String[] args) { new Other3().print(); } }
컴파일>javac -d . -classpath . Other3.java
현재 디렉터리를 기준으로 패키지 디렉터리 구성. import할 패키지 기준 위치 지정.
실행>java -classpath . net.jeongsam.exam2.Other3
현재 디렉터리를 기준으로 패키지 지정
다른 패키지에서 상속 관계 클래스
package net.jeongsam.exam2; import net.jeongsam.exam1.Base; public Other4 extends Base { void print() { System.out.println(a); // 출력 - 접근 제한 없음. System.out.println(b); // 오류 - Base 클래스 내에서만 접근 가능. System.out.println(c); // 출력 - 상속 관계 접근 가능. System.out.println(d); // 오류 - 동일 패키지에만 접근 가능. } public static void main(String[] args) { new Other4().print(); } }
컴파일>javac -d . -classpath . Other4.java
현재 디렉터리를 기준으로 패키지 디렉터리 구성. import할 패키지 기준 위치 지정.
실행>java -classpath . net.jeongsam.exam2.Other4
현재 디렉터리를 기준으로 패키지 지정