-
java 패키지대학/객체지향프로그래밍 2022. 10. 9. 14:26
파일 트리
소스코드
// inPack.java package outerPackage.innerPackage; public class inPack { String s; protected String ps; public inPack() { s = "inPack"; } public void print() { System.out.println("inPack: " + s); } protected void protPrint() { System.out.println(ps); } }
// outPack1.java package outerPackage; public class outPack1 { String s; outPack1() { s = "outPack1"; } void print() { System.out.println("outPack1: " + s); } protected void protPrint() { System.out.println("Protected method from outPack1"); } }
// outPack2.java package outerPackage; import outerPackage.innerPackage.inPack; public class outPack2 { String s; public outPack2() { outPack1 op1 = new outPack1(); s = op1.s + " add 2 @ outPack2"; op1.print(); op1.protPrint(); } public void print() { System.out.println("outPack2: " + s); inPack ip = new inPack(); ip.print(); // ip.protPrint(); } }
// outPack3.java package outerPackage; import outerPackage.innerPackage.inPack; public class outPack3 extends inPack { String s; public outPack3() { s = "outPack3"; // this.s ps = "protected String"; // super.ps } public void print() { inPack ip = new inPack(); ip.print(); // ip.protPrint(); super.protPrint(); } }
// App.java import outerPackage.*; import outerPackage.innerPackage.*; public class App { public static void main(String[] args) { // outPack1 op1 = new outPack1(); outPack2 op2 = new outPack2(); outPack3 op3 = new outPack3(); inPack ip = new inPack(); op2.print(); op3.print(); ip.print(); } } 실행 결과 outPack1: outPack1 Protected method from outPack1 outPack2: outPack1 add 2 @ outPack2 inPack: inPack inPack: inPack protected String inPack: inPack
java는 파일 시스템을 이용해서 패키지를 관리한다.
즉, 패키지 = 디렉토리 라고 생각하면 편하다.
예로 들어 source.java 파일에 피키지를 package a.b.c라 명시했다면,
source.java 파일은 CLASSPATH/a/b/c 폴더 아래에 들어있어야 한다.
여기서 CLASSPATH란, 일종의 환경변수로 java가 패키지를 찾을 때,
CLASSPATH 디랙토리의 내부부터 패키지를 찾게 된다.
- 접근 제어자
private (default) protected public 같은 패키지 / 상속 관계 X O O O 같은 패키지 / 상속 관계 아님 X O O O 다른 패키지 / 상속 관계 X X O O 다른 패키지 / 상속 관계 아님 X X X O 기본적으로는 같은 패키지 내부이면 접근할 수 있다. (private 제외)
하지만 다른 패키지인 경우, protected는 상속 관계에서만 허용하고,
public은 상속 관계가 아닌 경우까지 허용한다.
주의할 점은 protected 키워드가 붙은 멤버 변수를 접근할 때는 상속받은 경우 아무런 키워드 없이 접근이 가능하지만,
멤버 메서드를 접근할 때는 반드시 super 키워드를 붙여줘야 접근이 가능하다.
'대학 > 객체지향프로그래밍' 카테고리의 다른 글
java 예외 처리 (0) 2022.10.09 java 인터페이스 (0) 2022.10.09 java 클래스 (0) 2022.10.09 java 연산 및 제어 (0) 2022.10.07 java 기본 문법 (0) 2022.10.07